The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 80264
LICENSE 44
MANIFEST 112
META.json 67296
META.yml 149322
Makefile.PL 24125
README 24
bin/dzil 211
corpus/dist/AutoPrereqs/dist.ini 06
corpus/dist/AutoPrereqs/t/data.bin 01
corpus/dist/DZ-NonAscii/Changes 04
corpus/dist/DZ-NonAscii/dist.ini 010
corpus/dist/DZ-NonAscii/lib/DZ1.pm 010
corpus/dist/DZT_Share/my_data.dat 01
cpanfile 615
dist.ini 96
lib/Dist/Zilla/App/Command/add.pm 1022
lib/Dist/Zilla/App/Command/authordeps.pm 618
lib/Dist/Zilla/App/Command/build.pm 543
lib/Dist/Zilla/App/Command/clean.pm 522
lib/Dist/Zilla/App/Command/install.pm 639
lib/Dist/Zilla/App/Command/listdeps.pm 1272
lib/Dist/Zilla/App/Command/new.pm 532
lib/Dist/Zilla/App/Command/nop.pm 516
lib/Dist/Zilla/App/Command/release.pm 517
lib/Dist/Zilla/App/Command/run.pm 642
lib/Dist/Zilla/App/Command/setup.pm 626
lib/Dist/Zilla/App/Command/smoke.pm 544
lib/Dist/Zilla/App/Command/test.pm 757
lib/Dist/Zilla/App/Command/version.pm 059
lib/Dist/Zilla/App/Command.pm 518
lib/Dist/Zilla/App/Tester.pm 108
lib/Dist/Zilla/App.pm 511
lib/Dist/Zilla/Chrome/Term.pm 2241
lib/Dist/Zilla/Chrome/Test.pm 624
lib/Dist/Zilla/Dist/Builder.pm 39242
lib/Dist/Zilla/Dist/Minter.pm 1011
lib/Dist/Zilla/File/FromCode.pm 899
lib/Dist/Zilla/File/InMemory.pm 1438
lib/Dist/Zilla/File/OnDisk.pm 2626
lib/Dist/Zilla/MVP/Assembler/GlobalConfig.pm 625
lib/Dist/Zilla/MVP/Assembler/Zilla.pm 634
lib/Dist/Zilla/MVP/Assembler.pm 627
lib/Dist/Zilla/MVP/Reader/Finder.pm 66
lib/Dist/Zilla/MVP/Reader/Perl.pm 611
lib/Dist/Zilla/MVP/RootSection.pm 621
lib/Dist/Zilla/MVP/Section.pm 66
lib/Dist/Zilla/MintingProfile/Default.pm 513
lib/Dist/Zilla/Plugin/AutoPrereq.pm 612
lib/Dist/Zilla/Plugin/AutoPrereqs.pm 1079
lib/Dist/Zilla/Plugin/AutoVersion.pm 648
lib/Dist/Zilla/Plugin/BumpVersion.pm 516
lib/Dist/Zilla/Plugin/CPANFile.pm 515
lib/Dist/Zilla/Plugin/ConfirmRelease.pm 818
lib/Dist/Zilla/Plugin/DistINI.pm 1146
lib/Dist/Zilla/Plugin/Encoding.pm 0152
lib/Dist/Zilla/Plugin/ExecDir.pm 515
lib/Dist/Zilla/Plugin/ExtraTests.pm 518
lib/Dist/Zilla/Plugin/FakeRelease.pm 635
lib/Dist/Zilla/Plugin/FileFinder/ByName.pm 675
lib/Dist/Zilla/Plugin/FileFinder/Filter.pm 645
lib/Dist/Zilla/Plugin/FinderCode.pm 66
lib/Dist/Zilla/Plugin/GatherDir/Template.pm 1225
lib/Dist/Zilla/Plugin/GatherDir.pm 977
lib/Dist/Zilla/Plugin/GenerateFile.pm 666
lib/Dist/Zilla/Plugin/InlineFiles.pm 723
lib/Dist/Zilla/Plugin/License.pm 536
lib/Dist/Zilla/Plugin/MakeMaker/Runner.pm 721
lib/Dist/Zilla/Plugin/MakeMaker.pm 3496
lib/Dist/Zilla/Plugin/Manifest.pm 830
lib/Dist/Zilla/Plugin/ManifestSkip.pm 529
lib/Dist/Zilla/Plugin/MetaConfig.pm 524
lib/Dist/Zilla/Plugin/MetaJSON.pm 1051
lib/Dist/Zilla/Plugin/MetaNoIndex.pm 872
lib/Dist/Zilla/Plugin/MetaResources.pm 630
lib/Dist/Zilla/Plugin/MetaTests.pm 831
lib/Dist/Zilla/Plugin/MetaYAML.pm 1157
lib/Dist/Zilla/Plugin/ModuleBuild.pm 1983
lib/Dist/Zilla/Plugin/ModuleShareDirs.pm 514
lib/Dist/Zilla/Plugin/NextRelease.pm 23118
lib/Dist/Zilla/Plugin/PkgDist.pm 722
lib/Dist/Zilla/Plugin/PkgVersion.pm 24188
lib/Dist/Zilla/Plugin/PodCoverageTests.pm 1428
lib/Dist/Zilla/Plugin/PodSyntaxTests.pm 817
lib/Dist/Zilla/Plugin/PodVersion.pm 623
lib/Dist/Zilla/Plugin/Prereq.pm 515
lib/Dist/Zilla/Plugin/Prereqs.pm 6101
lib/Dist/Zilla/Plugin/PruneCruft.pm 537
lib/Dist/Zilla/Plugin/PruneFiles.pm 848
lib/Dist/Zilla/Plugin/Readme.pm 1447
lib/Dist/Zilla/Plugin/RemovePrereqs.pm 523
lib/Dist/Zilla/Plugin/ShareDir.pm 515
lib/Dist/Zilla/Plugin/TemplateModule.pm 1151
lib/Dist/Zilla/Plugin/TestRelease.pm 622
lib/Dist/Zilla/Plugin/UploadToCPAN.pm 22111
lib/Dist/Zilla/PluginBundle/Basic.pm 539
lib/Dist/Zilla/PluginBundle/Classic.pm 541
lib/Dist/Zilla/PluginBundle/FakeClassic.pm 55
lib/Dist/Zilla/PluginBundle/Filter.pm 938
lib/Dist/Zilla/Prereqs.pm 688
lib/Dist/Zilla/Role/AfterBuild.pm 514
lib/Dist/Zilla/Role/AfterMint.pm 514
lib/Dist/Zilla/Role/AfterRelease.pm 511
lib/Dist/Zilla/Role/BeforeArchive.pm 511
lib/Dist/Zilla/Role/BeforeBuild.pm 511
lib/Dist/Zilla/Role/BeforeMint.pm 511
lib/Dist/Zilla/Role/BeforeRelease.pm 511
lib/Dist/Zilla/Role/BuildPL.pm 931
lib/Dist/Zilla/Role/BuildRunner.pm 517
lib/Dist/Zilla/Role/Chrome.pm 55
lib/Dist/Zilla/Role/ConfigDumper.pm 77
lib/Dist/Zilla/Role/EncodingProvider.pm 054
lib/Dist/Zilla/Role/ExecFiles.pm 55
lib/Dist/Zilla/Role/File.pm 591
lib/Dist/Zilla/Role/FileFinder.pm 536
lib/Dist/Zilla/Role/FileFinderUser.pm 8100
lib/Dist/Zilla/Role/FileGatherer.pm 516
lib/Dist/Zilla/Role/FileInjector.pm 720
lib/Dist/Zilla/Role/FileMunger.pm 1038
lib/Dist/Zilla/Role/FilePruner.pm 513
lib/Dist/Zilla/Role/InstallTool.pm 515
lib/Dist/Zilla/Role/LicenseProvider.pm 525
lib/Dist/Zilla/Role/MetaProvider.pm 729
lib/Dist/Zilla/Role/MintingProfile/ShareDir.pm 511
lib/Dist/Zilla/Role/MintingProfile.pm 523
lib/Dist/Zilla/Role/ModuleMaker.pm 518
lib/Dist/Zilla/Role/MutableFile.pm 0169
lib/Dist/Zilla/Role/NameProvider.pm 515
lib/Dist/Zilla/Role/PPI.pm 1462
lib/Dist/Zilla/Role/Plugin.pm 527
lib/Dist/Zilla/Role/PluginBundle/Easy.pm 788
lib/Dist/Zilla/Role/PluginBundle.pm 513
lib/Dist/Zilla/Role/PrereqSource.pm 511
lib/Dist/Zilla/Role/Releaser.pm 511
lib/Dist/Zilla/Role/ShareDir.pm 55
lib/Dist/Zilla/Role/Stash/Authors.pm 612
lib/Dist/Zilla/Role/Stash/Login.pm 611
lib/Dist/Zilla/Role/Stash.pm 55
lib/Dist/Zilla/Role/StubBuild.pm 035
lib/Dist/Zilla/Role/TestRunner.pm 658
lib/Dist/Zilla/Role/TextTemplate.pm 530
lib/Dist/Zilla/Role/VersionProvider.pm 522
lib/Dist/Zilla/Stash/PAUSE.pm 612
lib/Dist/Zilla/Stash/Rights.pm 66
lib/Dist/Zilla/Stash/User.pm 66
lib/Dist/Zilla/Tester.pm 3326
lib/Dist/Zilla/Tutorial.pm 7136
lib/Dist/Zilla/Types.pm 614
lib/Dist/Zilla/Util/AuthorDeps.pm 915
lib/Dist/Zilla/Util.pm 931
lib/Dist/Zilla.pm 21243
lib/Test/DZil.pm 7105
t/00-compile.t 730
t/000-report-versions-tiny.t 917
t/commands/authordeps.t 14
t/file.t 0178
t/plugins/autoprereqs.t 01
t/plugins/confirmrelease.t 415
t/plugins/distmeta.t 030
t/plugins/filefinders.t 1636
t/plugins/gatherdir.t 44
t/plugins/generatefile.t 45
t/plugins/license.t 2038
t/plugins/makemaker.t 02
t/plugins/manifest.t 11
t/plugins/modulebuild.t 02
t/plugins/nextrelease.t 040
t/plugins/pkgversion.t 071
t/plugins/podversion.t 036
t/plugins/prereqs.t 041
t/plugins/readme.t 017
t/tester-demo.t 01
t/tester.t 02
t/util.t 21
xt/release/changes_has_content.t 11
xt/release/pod-syntax.t 32
176 files changed (This is a version diff) 15437033
@@ -1,277 +1,461 @@
 Revision history for Dist-Zilla
 
+5.019     2014-05-20 21:11:47-04:00 America/New_York
+        - remove a very brief-lived attempt to double-decode
+
+5.018     2014-05-20 21:07:04-04:00 America/New_York
+        - attempt to return abstract-from-file as a string, rather than
+          bytes, which can lead to weirdness (github issue #303)
+
+5.017     2014-05-17 08:35:33-04:00 America/New_York
+        - dotfiles and dot-directories are now included in sharedirs
+        - ModuleBuild and MakeMake should not re-build if it isn't needed
+        - authordeps now better understands "perl" dep
+        - munging of README is delayed to prevent unneeded work and
+          complication
+        - MANIFEST is now treated as a binary file
+        - 'dzil setup' now warns that credentials are stored in the clear
+        - MakeMaker should include fewer empty and useless hashrefs
+        - Makefile.old is now pruned as cruft
+
+5.016     2014-05-05 22:27:06-04:00 America/New_York
+        - hint about [Encoding] plugin in encoding error message (David
+          Golden)
+
+5.015     2014-03-30 21:55:36-04:00 America/New_York
+        - make it easier to have multiple PAUSE configs using UploadToCPAN's
+          pause_cfg_dir option (thanks, David Golden)
+
+5.014     2014-03-16 16:47:07+01:00 Europe/Paris
+        - Added 'jobs' argument for 'dzil test' for parallel testing (thanks,
+          David Golden!)
+        - add default_jobs attribute to TestRunner role
+        - fix the behavior of 'dzil add' with more than one file
+          (thanks, Leon Timmermans!)
+
+5.013     2014-02-08 17:08:16-05:00 America/New_York
+        - META.json is now a UTF-8 file, rather than ASCII
+        - document the use of filefinders in [PkgVersion], and remove
+          filtering out of .t, .pod files; do skip non-text files, though
+        - always load modules in "extra tests" like pod-coverage.t
+        - PruneCruft also prunes ./fatlib
+        - avoid being tricked by statements in __END__ section when looking for
+          variable assignments
+        - if "dzil install" fails due to exception, it is now propagated
+        - provide a better error when terminal encoding can't be determined
+
+5.012     2014-01-15 09:58:00-05:00 America/New_York
+        - when handling a multi-line abstract, fold the lines on whitespace;
+          previously, the newlines had been left in, which caused downstream
+          warnings
+
+5.011     2014-01-12 16:09:29-05:00 America/New_York
+        - ->VERSION is again defined in the tester forms of Builder and Minter
+        - remove a small obsolete code path from PkgVersion
+
+5.010     2014-01-11 22:06:04-05:00 America/New_York
+        - stop sharing a reference to cached PPI docs, which led to spooky
+          action at a distance
+        - PkgVersion no longer surrounds the new $VERSION assignment with a
+          bare block
+        - if there's a blank line after the package statement (and any number
+          of comment-only lines), PkgVersion will use that for a $VERSION
+          assignment, rather than insert a new line; this can be made mandatory
+          with die_on_line_insertion
+
+5.009     2014-01-07 20:21:17-05:00 America/New_York
+        - include time offset by default in NextRelease
+        - always pass PPI octets, not text
+
+5.008     2013-12-27 21:57:02 America/New_York
+        - fix utterly broken `dzil run`
+
+5.007     2013-12-27 20:50:45-05:00 America/New_York
+        - add the ability to say "dzil run --no-build" to run a command without
+          building inside the dist dir
+          (in other words, no `perl Makefile.PL && make`)
+        - Archive::Tar::Wrapper added as a recommended prereq
+        - fix :ShareFiles (thanks, Christopher J. Madsen and Karen Etheridge)
+        - new :AllFiles and :NoFiles filefinders (thanks, Karen Etheridge)
+        - most files generated by dzil plugins now self-identify with comments
+
+5.006     2013-11-06 09:21:12 America/New_York
+        - add ->is_bytes to files; shortcut for ->encoding eq 'bytes'
+          (thanks, David Golden)
+        - AutoPrereqs will not try scanning binary files (thanks, David Golden)
+
+5.005     2013-11-02 16:32:04 America/New_York
+        - add --keep-build-dir to "dzil test" and "dzil install"
+
+5.004     2013-11-02 09:59:18 America/New_York
+        [THIS RELEASE MIGHT BREAK YOUR BUILD]
+        - stable release of all the v5 changes below; READ THEM!
+        - by default, NextRelease now adds a trial release marker on trial
+          releases
+        - dzil setup will not echo password during setup
+
+5.003     2013-10-30 08:02:59 America/New_York
+        [THIS RELEASE MIGHT BREAK YOUR BUILD]
+        - add "dzil --version" support (thanks, Upasana Shukla)
+        - fix boneheaded mistake that broke listdeps in 5.002 (thanks, Karen
+          Etheridge)
+
+5.002     2013-10-29 10:35:54 America/New_York
+        [THIS RELEASE MIGHT BREAK YOUR BUILD]
+        - perform encoding steps during listdeps
+
+5.001     2013-10-23 17:40:09 America/New_York
+        [THIS RELEASE MIGHT BREAK YOUR BUILD]
+        - typo fixes (thanks, David Steinbrunner)
+
+5.000     2013-10-20 08:10:02 America/New_York
+        [THIS RELEASE MIGHT BREAK YOUR BUILD]
+        - all files now have content, encoded_content, and encoding attributes
+        - the Encoding plugin and EncodingProvider role have been added to
+          allow you to set the encoding on files; the default is UTF-8
+        - config.ini is assumed to be in UTF-8
+        - Data::Section sections are assumed to be UTF-8
+        - the Term chrome should encode input and output
+
+4.300039  2013-09-20 06:05:10 Asia/Tokyo
+        - tweak metafile generator to keep CPAN::Meta validator happy (thanks,
+          David Golden)
+
+4.300038  2013-09-08 09:18:34 America/New_York
+        - add horrible hack to avoid generating non-UTF-8 META.yml; seriously,
+          don't look at the code!  Thanks, David Golden, whose code was simple
+          and probably much, much saner, but didn't cover as many cases as rjbs
+          wanted to cover.
+
+4.300037  2013-08-28 21:43:36 America/New_York
+        - update repo and bugtacker URLs
+
+4.300036  2013-08-25 21:41:21 America/New_York
+        - read CPAN::Uploader config with CPAN::Uploader, to work with new
+          trial releases supporting encrypted credential (thanks, Mike Doherty)
+
+        - improve tester tests (thanks, Dave O'Neill!)
+
+        - use Class::Load instead of Class::MOP
+
+        - better error messages when a bundle can't be loaded by @Filter
+
+        - make dynamic_config distmeta sticky; once one plugin sets it, it
+          stays stuck
+
+        - add a die_on_existing_version option to PkgVersion
+
+        - switch (for now?) "dzil install" to use cpanm
+
+        - PkgVersion won't rewrite file contents if nothing was changed
+          (thanks, Mike Doherty!)
+
+4.300035  2013-06-19 21:37:28 America/New_York
+        - update for new Perl::PrereqScanner, which will find "lib"
+
+        - update AutoPrereqs to skip Config and Errno
+
+        - fix docs to not suggest obsolete "Prereq" name (thanks, Ivan
+          Bessarabov!)
+
+4.300034  2013-04-13 16:56:48 Europe/London
+        - delay loading of CPAN::Uploader, and require a newer version to
+          require HTTPS (thanks, Olivier Mengué!)
+
+4.300033  2013-04-05 15:00:37 America/New_York
+        - fix .build/latest (thanks, Karen Etheridge!)
+
+        - doc fixes (thanks, Randy Stauner!)
+
+4.300032  2013-03-29 16:41:11 America/New_York
+        - test_requires support for ModuleBuild and MakeMaker (thanks,
+          Tatsuhiko Miyagawa!)
+
+4.300031  2013-03-17 21:47:31 America/New_York
+        - stacktrace removed from exception when a plugin's minimum version
+          check fails (thanks, Karen Etheridge!)
+
+        - add 'dzil listdeps --json', which lists all prerequisites broken up
+          by phase and type, in readable JSON format (thanks, Karen Etheridge!)
+
+        - improve errors when there's not enough configuration and no global
+          config file can be found (thanks, Dimitar Petrov)
+
+        - delay loading yet more libraries until needed (thanks, Olivier
+          Mengué!)
+
 4.300030  2013-01-30 22:25:27 America/New_York
-          listdeps --versions now sorts properly (thanks, Karen Etheridge!)
+        - listdeps --versions now sorts properly (thanks, Karen Etheridge!)
 
-          delay loading more libraries until needed (thanks, Olivier Mengué!)
+        - delay loading more libraries until needed (thanks, Olivier Mengué!)
 
-          excluded filenames in GatherDir were sometimes matched too fuzzily
+        - excluded filenames in GatherDir were sometimes matched too fuzzily
           (thanks, Mike Doherty)
 
 4.300029  2013-01-14 20:03:15 America/New_York
-          allow :version directive in root section to require a given version
+        - allow :version directive in root section to require a given version
           of Dist::Zilla
 
-          simply and speedify some of GatherDir (Thanks, Olivier Mengué!)
+        - simply and speedify some of GatherDir (Thanks, Olivier Mengué!)
 
 4.300028  2012-10-19 10:50:42 America/New_York
-          when picking modules to treat as "part of the dist," be more lax in
+        - when picking modules to treat as "part of the dist," be more lax in
           understanding libraries under ./t:  ./t/lib/Foo.pm is now treated as
           providing t::lib::Foo, lib::Foo, and Foo
 
 4.300027  2012-10-16 21:07:06 America/New_York
-          the "latest" symlink code broke Dist::Zilla on win32; fixed now!
+        - the "latest" symlink code broke Dist::Zilla on win32; fixed now!
           (thanks, Brendan Byrd!)
 
 4.300026  2012-10-13 22:21:17 America/New_York
-          PodSyntaxTests, PodCoverageTests and MetaTests now add the right
+        - PodSyntaxTests, PodCoverageTests and MetaTests now add the right
           develop/requires prereqs (thanks, Olivier Mengué and Ricardo Signes!)
 
-          ModuleBuild now takes an mb_lib argument that can override the
+        - ModuleBuild now takes an mb_lib argument that can override the
           default of "inc" (thanks, ben hengst)
 
-          create .build/latest symlink when a build in .build is built (thanks,
+        - create .build/latest symlink when a build in .build is built (thanks,
           Alexei Znamensky!)
 
-          allow "-version" arg to [@Filter] to specify the version of the
+        - allow "-version" arg to [@Filter] to specify the version of the
           bundle required (thanks, Rob Hoelz)
 
 4.300025  2012-10-07 23:02:33 America/New_York
-          add the LicenseProvider and NameProvider roles (thanks, Vyacheslav
+        - add the LicenseProvider and NameProvider roles (thanks, Vyacheslav
           Matjukhin!)
 
-          make Dist::Zilla::App::Tester be a CaptureExternal App::Cmd::Tester
+        - make Dist::Zilla::App::Tester be a CaptureExternal App::Cmd::Tester
 
 4.300024  2012-09-26 12:01:45 America/New_York
-          include $] in MetaConfig data
+        - include $] in MetaConfig data
 
 4.300023  2012-09-06 09:01:12 America/New_York
-          do not use ">" in a filename; fixes the build on Win32 (thanks,
+        - do not use ">" in a filename; fixes the build on Win32 (thanks,
           djgoku!)
 
 4.300022  2012-09-05 08:35:27 America/New_York
-          do not detect an escaped "\$VERSION =" as an assignment to a variable
+        - do not detect an escaped "\$VERSION =" as an assignment to a variable
           (this is sort of a half-measure)
 
-          'dzil run' also edits $PATH to include ExecDir directories (Karen
+        - 'dzil run' also edits $PATH to include ExecDir directories (Karen
           Etheridge)
 
 4.300021  2012-07-31 23:20:50 America/New_York
-          plugins can now provide a MANIFEST.SKIP that can be processed by
+        - plugins can now provide a MANIFEST.SKIP that can be processed by
           ManifestSkip. Previously generated content was just ignored.
           (thanks, Olivier Mengué!)
 
-          GenerateFile can now also template its filename, with the
+        - GenerateFile can now also template its filename, with the
           name_is_template option (Thanks, Karen Etheridge!)
 
 4.300020  2012-06-21 11:17:40 America/New_York
-          properly set the working directory when testing (thanks, Jesse
+        - properly set the working directory when testing (thanks, Jesse
           Luehrs!)
 
 4.300019  2012-06-20 15:36:01 America/New_York
-          avoid looking outside the dist during testing (thanks, Jesse Luehrs!)
+        - avoid looking outside the dist during testing (thanks, Jesse Luehrs!)
 
 4.300018  2012-06-07 22:25:03 America/New_York
-          format codes %E, %T, %U, & %V added to NextRelease (thanks,
+        - format codes %E, %T, %U, & %V added to NextRelease (thanks,
           Karen Etheridge & Christopher J. Madsen!)
 
 4.300017  2012-05-31 12:17:45 America/New_York
-          also check plugin version requirements in dzil authordeps --missing
+        - also check plugin version requirements in dzil authordeps --missing
           (Karen Etheridge)
 
-          add 'dzil add' to add new modules to an existing dist (thanks, David
+        - add 'dzil add' to add new modules to an existing dist (thanks, David
           Golden!)
 
-          misc. bugfixes (thanks, Karen Etheridge and Olivier Mengué!)
+        - misc. bugfixes (thanks, Karen Etheridge and Olivier Mengué!)
 
 4.300016  2012-05-04 22:09:10 America/New_York
-          make AutoPrereqs treat .psgi files as scannable (thanks, Jakob Voss!)
+        - make AutoPrereqs treat .psgi files as scannable (thanks, Jakob Voss!)
 
-          add yet more links in plugins documentation to help discoverability
+        - add yet more links in plugins documentation to help discoverability
           of other plugins.  (thanks, Olivier Mengué!)
 
-          AutoPrereqs: skip author and release tests when scanning (RT#76305).
+        - AutoPrereqs: skip author and release tests when scanning (RT#76305).
           (thanks, Olivier Mengué!)
 
 4.300015  2012-04-23 21:38:21 America/New_York
-          require a CPAN::Meta::Requirements 2.121 to get the
+        - require a CPAN::Meta::Requirements 2.121 to get the
           requirements_for_module (thanks, Olivier Mengué!)
 
-          'dzil run' with no arguments will now invoke a new shell.  (thanks,
+        - 'dzil run' with no arguments will now invoke a new shell.  (thanks,
           Karen Etheridge!)
 
-          dzil clean now has has a "dry run" option.  (thanks, Karen
+        - dzil clean now has has a "dry run" option.  (thanks, Karen
           Etheridge!)
 
-          add more links in plugins documentation to help discoverability
+        - add more links in plugins documentation to help discoverability
           of other plugins.  (thanks, Olivier Mengué!)
 
-          support :version requirement for bundles (thanks, Randy Stauner!)
+        - support :version requirement for bundles (thanks, Randy Stauner!)
 
 4.300014  2012-04-05 12:46:33 America/New_York
-          added the CPANFile plugin to create "cpanfile" prereq format
+        - added the CPANFile plugin to create "cpanfile" prereq format
 
-          stop emitting an empty line in authordeps output (thanks, Olivier
+        - stop emitting an empty line in authordeps output (thanks, Olivier
           Mengué!)
 
 4.300013  2012-03-31 15:55:47 Europe/Paris
-          dzil test has a new option, --all, which is the equivalent of
+        - dzil test has a new option, --all, which is the equivalent of
           --release --automated --author.
 
 4.300012  2012-03-30 14:31:56 Europe/Paris
-          add 0 and never <undef> to the prereqs (thanks, David Golden)
+        - add 0 and never <undef> to the prereqs (thanks, David Golden)
 
 4.300011  2012-03-30 11:42:44 Europe/Paris
-          do not claim that a dep is missing in "listdeps" when it is present
+        - do not claim that a dep is missing in "listdeps" when it is present
           with an undef $VERSION and we only require version 0 (reported by
           Matthew Horsfall)
 
 4.300010  2012-03-15 21:38:58 America/New_York
-          The GatherDir::Template documentation has been improved
+        - The GatherDir::Template documentation has been improved
           (Thanks, Christopher J. Madsen!)
 
-          Depend on a more recent version of Config::MVP, which requires a fix
+        - Depend on a more recent version of Config::MVP, which requires a fix
           in Class::Load to fix detection of plugin compilation errors on
           perl5.8.8 (see Class::Load Changes file for details.)  (Karen
           Etheridge)
 
-          Add --versions support to listdeps and authordeps (Cory G Watson)
+        - Add --versions support to listdeps and authordeps (Cory G Watson)
 
-          Documentation fixes
+        - Documentation fixes
 
 4.300009  2012-02-21 19:38:29 America/New_York
-          PruneCruft also excludes the _Inline/ directory and MYMETA.json
+        - PruneCruft also excludes the _Inline/ directory and MYMETA.json
 
-          MakeMaker has been refactored to make it easier to subclass
+        - MakeMaker has been refactored to make it easier to subclass
           (Thanks, Christopher J. Madsen!)
 
 4.300008  2012-02-16 17:28:34 America/New_York
-          work around qr//m bug in 5.8.8 and earlier (thanks, Randy Stauner!)
+        - work around qr//m bug in 5.8.8 and earlier (thanks, Randy Stauner!)
 
-          Fix to MakeMaker plugin: use separate scope for code that changes
+        - Fix to MakeMaker plugin: use separate scope for code that changes
           namespace, when inserting ShareDir code. (RT#74788) (Karen Etheridge)
 
 4.300007  2012-02-02 22:23:05 America/New_York
-          Remove configs beginning with ':' from argument list before
+        - Remove configs beginning with ':' from argument list before
           constructing that config; fixes issue where :version was
           being passed to a plugin that had a strict constructor. (Karen
           Etheridge)
 
 4.300006  2011-12-30 15:28:34 America/New_York
-          New methods dist_basename & archive_filename allow plugins
+        - New methods dist_basename & archive_filename allow plugins
           to reliably get that information.  This makes TestRelease
           testable. (Thanks, Kent Fredric & Christopher J. Madsen!)
 
-          Your PAUSE password will now no be echoed if entered at the
+        - Your PAUSE password will now no be echoed if entered at the
           prompt, on most operating systems (Thanks, Mike Doherty!)
 
-          replace use of Version::Requirements with CPAN::Meta::Requirements,
+        - replace use of Version::Requirements with CPAN::Meta::Requirements,
           its replacement
 
 4.300005  2011-12-13 08:49:19 America/New_York
-          Prereqs now actually understands -relationship as documented
+        - Prereqs now actually understands -relationship as documented
           in 4.300004.  Also, it throws an error if you give it a
           plugin name that does not specify a relationship (Thanks,
           Christopher J. Madsen!)
 
 4.300004  2011-12-12 23:34:30 America/New_York
-          a new FileFinder plugin has been added, FileFinder::Filter
+        - a new FileFinder plugin has been added, FileFinder::Filter
           (Thanks, Christopher J. Madsen!)
 
-          AutoPrereqs can now be told to determine configure_requires
+        - AutoPrereqs can now be told to determine configure_requires
           (Thanks, Christopher J. Madsen!)
 
-          the (lack of) order of check of authordeps is now a bit more
+        - the (lack of) order of check of authordeps is now a bit more
           predictible:
           - plugins declared with "; authordep" lines are loaded before others
           - inc:: plugins are checked first and in ASCII order
           (Thanks, Olivier Mengué!)
 
-          Many slow-to-load modules are now loaded opportunistically to improve
+        - Many slow-to-load modules are now loaded opportunistically to improve
           startup time.  (Thanks Olivier Mengué and rjbs)
 
-          ShareDir documentation has been improved (thanks, Karen
+        - ShareDir documentation has been improved (thanks, Karen
           Etheridge)
 
-          Prereqs documentation has been improved
+        - Prereqs documentation has been improved
 
 4.300003  2011-10-31 23:58:19 America/New_York
-          If no credentials are found on disk, UploadToCPAN will now prompt for
+        - If no credentials are found on disk, UploadToCPAN will now prompt for
           credentials during the BeforeRelease phase, not during release
           (Thanks, Christopher J. Madsen!)
 
-          AutoPrereqs can now be told what scanners or extra_scanners args to
+        - AutoPrereqs can now be told what scanners or extra_scanners args to
           pass to Perl::PrereqScanner (Thanks, Christopher J. Madsen!)
 
-          Prune perl prereqs out of BUILD_REQUIRES for EU::MM, and pick the
+        - Prune perl prereqs out of BUILD_REQUIRES for EU::MM, and pick the
           highest required perl of either runtime or built requires.  (Thanks,
           Christopher J. Madsen!)
 
-          Test routines should now properly report the calling line for
+        - Test routines should now properly report the calling line for
           failures ($Test::Builder::Level is being set) (Thanks, Christopher J.
           Madsen!)
 
-          the is_filelist test assertion now works with objects that do the
+        - the is_filelist test assertion now works with objects that do the
           Dist::Zilla::Role::File role (Thanks, Christopher J. Madsen!)
 
-          a new FileFinder plugin has been added, FileFinder::ByName
+        - a new FileFinder plugin has been added, FileFinder::ByName
           (Thanks, Christopher J. Madsen!)
 
 4.300002  2011-09-22 09:43:45 America/New_York
-          fix a bug that does Weird Stuff when a 0b file exists (thanks,
+        - fix a bug that does Weird Stuff when a 0b file exists (thanks,
           Christian Walde!)
 
 4.300001  2011-09-19 15:46:18 America/New_York
-          Several improvements to how PPI is used should speed up the
+        - Several improvements to how PPI is used should speed up the
           performance of Perl file munging and scanning.  The PPI role was
           added.  (Thanks, Dave Rolsky!)
 
-          We now use Archive::Tar::Wrapper if available, to speed up archive
+        - We now use Archive::Tar::Wrapper if available, to speed up archive
           building.  (Thanks, Dave Rolsky!)
 
 4.300000  2011-08-19 10:12:36 America/New_York
-          turn on Useqq option for Dumper, to get unicode string literals set
+        - turn on Useqq option for Dumper, to get unicode string literals set
           properly in Makefile.PL and Build.PL without using utf8.pm
 
-          decode user input from Chrome::Term as UTF-8
+        - decode user input from Chrome::Term as UTF-8
 
-          during `dzil setup`, the config.ini file is now created with an added
+        - during `dzil setup`, the config.ini file is now created with an added
           umask of 077 to avoid other users reading your PAUSE credentials
 
-          update almost all Moose code to use make_immutable and
+        - update almost all Moose code to use make_immutable and
           namespace::autoclean
 
 4.200018  2011-08-18 11:13:03 America/New_York
-          correct Perl::PrereqScanner version requirement, which was too low
+        - correct Perl::PrereqScanner version requirement, which was too low
 
 4.200017  2011-08-17 18:54:07 America/New_York
-          require and adapt to the new Perl::PrereqScanner, which does not
+        - require and adapt to the new Perl::PrereqScanner, which does not
           prune out prereqs just because they're core and common
 
 4.200016  2011-08-17 18:07:21 America/New_York
-          add options to exclude files from GatherDir (David Golden)
+        - add options to exclude files from GatherDir (David Golden)
 
 4.200015  2011-08-12 13:45:42 America/New_York
-          don't build the dist in a directory with -TRIAL in the name; this
+        - don't build the dist in a directory with -TRIAL in the name; this
           should fix bugs in "dzil release --trial" and probably other related
           bugs
 
 4.200014  2011-08-07 18:18:01 America/New_York
-          add documentation for TemplateModule (thanks, Kent Fredric)
+        - add documentation for TemplateModule (thanks, Kent Fredric)
 
-          fixes to tester.t for Win32 (thanks, Christian Walde)
+        - fixes to tester.t for Win32 (thanks, Christian Walde)
 
 4.200013  2011-08-05 09:30:01 America/New_York
-          "dzil listdeps --missing" no longer dies if it encounters an invalid
+        - "dzil listdeps --missing" no longer dies if it encounters an invalid
           $VERSION (Jesse Luehrs)
 
-          PkgVersion and PkgDist no longer use BEGIN blocks
+        - PkgVersion and PkgDist no longer use BEGIN blocks
 
 4.200012  2011-07-18 09:02:09 America/New_York
-          allow abstracts of more than one line, or with more than one word
+        - allow abstracts of more than one line, or with more than one word
           before the dash, to be properly extracted (Florian Ragwitz)
 
-          stringify tarball name to work with older Archive::Tar (Jan Tore
+        - stringify tarball name to work with older Archive::Tar (Jan Tore
           Morken)
 
 4.200011  2011-07-14 22:53:34 America/New_York
@@ -1,4 +1,4 @@
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@ b) the "Artistic License"
 
 --- The GNU General Public License, Version 1, February 1989 ---
 
-This software is Copyright (c) 2013 by Ricardo SIGNES.
+This software is Copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software, licensed under:
 
@@ -22,7 +22,7 @@ This is free software, licensed under:
                      Version 1, February 1989
 
  Copyright (C) 1989 Free Software Foundation, Inc.
- 51 Franklin St, Suite 500, Boston, MA  02110-1335  USA
+ 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
@@ -272,7 +272,7 @@ That's all there is to it!
 
 --- The Artistic License 1.0 ---
 
-This software is Copyright (c) 2013 by Ricardo SIGNES.
+This software is Copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software, licensed under:
 
@@ -1,3 +1,4 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.017.
 Changes
 LICENSE
 MANIFEST
@@ -11,6 +12,10 @@ corpus/dist/AutoPrereqs/bin/foobar
 corpus/dist/AutoPrereqs/dist.ini
 corpus/dist/AutoPrereqs/lib/DZPA/Empty.pm
 corpus/dist/AutoPrereqs/lib/DZPA/Main.pm
+corpus/dist/AutoPrereqs/t/data.bin
+corpus/dist/DZ-NonAscii/Changes
+corpus/dist/DZ-NonAscii/dist.ini
+corpus/dist/DZ-NonAscii/lib/DZ1.pm
 corpus/dist/DZ1/dist.ini
 corpus/dist/DZ1/lib/DZ1.pm
 corpus/dist/DZ2/dist.pl
@@ -22,6 +27,7 @@ corpus/dist/DZT_Inc/Foo.pm
 corpus/dist/DZT_Inc/Foo/Bar.pm
 corpus/dist/DZT_NoPm/lib/DZT/Sample.pod
 corpus/dist/DZT_NoPm/t/basic.t
+corpus/dist/DZT_Share/my_data.dat
 corpus/extra/subdir/index.html
 corpus/extra/vader.txt
 corpus/global/config.ini
@@ -43,6 +49,7 @@ lib/Dist/Zilla/App/Command/run.pm
 lib/Dist/Zilla/App/Command/setup.pm
 lib/Dist/Zilla/App/Command/smoke.pm
 lib/Dist/Zilla/App/Command/test.pm
+lib/Dist/Zilla/App/Command/version.pm
 lib/Dist/Zilla/App/Tester.pm
 lib/Dist/Zilla/Chrome/Term.pm
 lib/Dist/Zilla/Chrome/Test.pm
@@ -66,6 +73,7 @@ lib/Dist/Zilla/Plugin/BumpVersion.pm
 lib/Dist/Zilla/Plugin/CPANFile.pm
 lib/Dist/Zilla/Plugin/ConfirmRelease.pm
 lib/Dist/Zilla/Plugin/DistINI.pm
+lib/Dist/Zilla/Plugin/Encoding.pm
 lib/Dist/Zilla/Plugin/ExecDir.pm
 lib/Dist/Zilla/Plugin/ExtraTests.pm
 lib/Dist/Zilla/Plugin/FakeRelease.pm
@@ -121,6 +129,7 @@ lib/Dist/Zilla/Role/BuildPL.pm
 lib/Dist/Zilla/Role/BuildRunner.pm
 lib/Dist/Zilla/Role/Chrome.pm
 lib/Dist/Zilla/Role/ConfigDumper.pm
+lib/Dist/Zilla/Role/EncodingProvider.pm
 lib/Dist/Zilla/Role/ExecFiles.pm
 lib/Dist/Zilla/Role/File.pm
 lib/Dist/Zilla/Role/FileFinder.pm
@@ -135,6 +144,7 @@ lib/Dist/Zilla/Role/MetaProvider.pm
 lib/Dist/Zilla/Role/MintingProfile.pm
 lib/Dist/Zilla/Role/MintingProfile/ShareDir.pm
 lib/Dist/Zilla/Role/ModuleMaker.pm
+lib/Dist/Zilla/Role/MutableFile.pm
 lib/Dist/Zilla/Role/NameProvider.pm
 lib/Dist/Zilla/Role/PPI.pm
 lib/Dist/Zilla/Role/Plugin.pm
@@ -146,6 +156,7 @@ lib/Dist/Zilla/Role/ShareDir.pm
 lib/Dist/Zilla/Role/Stash.pm
 lib/Dist/Zilla/Role/Stash/Authors.pm
 lib/Dist/Zilla/Role/Stash/Login.pm
+lib/Dist/Zilla/Role/StubBuild.pm
 lib/Dist/Zilla/Role/TestRunner.pm
 lib/Dist/Zilla/Role/TextTemplate.pm
 lib/Dist/Zilla/Role/VersionProvider.pm
@@ -164,12 +175,12 @@ misc/lib/Dist/Zilla/App/Command/gconf.pm
 misc/lib/Dist/Zilla/App/Command/input.pm
 profiles/default/extra-dist.ini
 profiles/default/profile.ini
-t/00-compile.t
 t/000-report-versions-tiny.t
 t/commands/authordeps.t
 t/compile.t
 t/diagnostics/main-module.t
 t/diagnostics/plugin-fail.t
+t/file.t
 t/lib/Dist/Zilla/Plugin/BrokenPlugin.pm
 t/lib/Dist/Zilla/Plugin/BrokenPlugin2.pm
 t/lib/Dist/Zilla/Plugin/BrokenPlugin3.pm
@@ -4,7 +4,7 @@
       "Ricardo SIGNES <rjbs@cpan.org>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 4.300030, CPAN::Meta::Converter version 2.120921",
+   "generated_by" : "Dist::Zilla version 5.017, CPAN::Meta::Converter version 2.141170",
    "license" : [
       "perl_5"
    ],
@@ -23,7 +23,7 @@
       "configure" : {
          "requires" : {
             "ExtUtils::MakeMaker" : "6.30",
-            "File::ShareDir::Install" : "0.03"
+            "File::ShareDir::Install" : "0.06"
          }
       },
       "develop" : {
@@ -34,9 +34,11 @@
       },
       "runtime" : {
          "recommends" : {
+            "Archive::Tar::Wrapper" : "0.15",
             "Term::ReadLine::Gnu" : "0"
          },
          "requires" : {
+            "App::Cmd::Command::version" : "0",
             "App::Cmd::Setup" : "0.309",
             "App::Cmd::Tester" : "0.306",
             "App::Cmd::Tester::CaptureExternal" : "0",
@@ -45,7 +47,7 @@
             "CPAN::Meta::Prereqs" : "2.120630",
             "CPAN::Meta::Requirements" : "2.121",
             "CPAN::Meta::Validator" : "2.101550",
-            "CPAN::Uploader" : "0.101550",
+            "CPAN::Uploader" : "0.103004",
             "Carp" : "0",
             "Class::Load" : "0.17",
             "Config::INI::Reader" : "0",
@@ -57,7 +59,7 @@
             "Config::MVP::Reader::INI" : "2",
             "Config::MVP::Section" : "2.200002",
             "Data::Dumper" : "0",
-            "Data::Section" : "0.004",
+            "Data::Section" : "0.200002",
             "DateTime" : "0.44",
             "Digest::MD5" : "0",
             "Encode" : "0",
@@ -77,6 +79,7 @@
             "List::MoreUtils" : "0",
             "List::Util" : "0",
             "Log::Dispatchouli" : "1.102220",
+            "Mixin::Linewise::Readers" : "0.100",
             "Moose" : "0.92",
             "Moose::Autobox" : "0.10",
             "Moose::Role" : "0",
@@ -89,19 +92,23 @@
             "MooseX::Types::Path::Class" : "0",
             "MooseX::Types::Perl" : "0",
             "PPI" : "0",
+            "PPI::Document" : "0",
             "Params::Util" : "0",
-            "Path::Class" : "0",
-            "Perl::PrereqScanner" : "1.005",
+            "Path::Class" : "0.22",
+            "Path::Tiny" : "0",
+            "Perl::PrereqScanner" : "1.016",
             "Perl::Version" : "0",
             "Pod::Eventual" : "0.091480",
             "Scalar::Util" : "0",
             "Software::License" : "0.101370",
             "Software::LicenseUtils" : "0",
+            "Storable" : "0",
             "String::Formatter" : "0.100680",
             "String::RewritePrefix" : "0.005",
             "Sub::Exporter" : "0",
             "Sub::Exporter::ForMethods" : "0",
             "Sub::Exporter::Util" : "0",
+            "Term::Encoding" : "0",
             "Term::ReadKey" : "0",
             "Term::ReadLine" : "0",
             "Term::UI" : "0",
@@ -122,137 +129,192 @@
       },
       "test" : {
          "requires" : {
-            "File::Find" : "0",
             "Software::License::None" : "0",
+            "Test::FailWarnings" : "0",
             "Test::Fatal" : "0",
             "Test::File::ShareDir" : "0",
-            "Test::More" : "0.96"
+            "Test::More" : "0.96",
+            "lib" : "0",
+            "utf8" : "0"
          }
       }
    },
    "release_status" : "stable",
    "resources" : {
       "bugtracker" : {
-         "web" : "https://github.com/rjbs/dist-zilla/issues"
+         "web" : "https://github.com/rjbs/Dist-Zilla/issues"
       },
       "homepage" : "http://dzil.org/",
       "repository" : {
          "type" : "git",
-         "url" : "http://github.com/rjbs/dist-zilla.git",
-         "web" : "http://github.com/rjbs/dist-zilla"
+         "url" : "https://github.com/rjbs/Dist-Zilla.git",
+         "web" : "https://github.com/rjbs/Dist-Zilla"
       },
       "x_mailing_list" : "http://www.listbox.com/subscribe/?list_id=139292"
    },
-   "version" : "4.300030",
+   "version" : "5.019",
    "x_Dist_Zilla" : {
       "perl" : {
-         "version" : "5.017008"
+         "version" : "5.019011"
       },
       "plugins" : [
          {
             "class" : "Dist::Zilla::Plugin::Git::GatherDir",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::GatherDir" : {
+                  "include_untracked" : "0"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@Filter/Git::GatherDir",
-            "version" : "2.007"
+            "version" : "2.022"
          },
          {
             "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
             "name" : "@Filter/CheckPrereqsIndexed",
-            "version" : "0.008"
+            "version" : "0.012"
          },
          {
             "class" : "Dist::Zilla::Plugin::CheckExtraTests",
             "name" : "@Filter/CheckExtraTests",
-            "version" : "0.008"
+            "version" : "0.021"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PromptIfStale",
+            "config" : {
+               "Dist::Zilla::Plugin::PromptIfStale" : {
+                  "check_all_plugins" : 0,
+                  "check_all_prereqs" : 0,
+                  "modules" : [
+                     "Dist::Zilla::PluginBundle::RJBS"
+                  ],
+                  "phase" : "build",
+                  "skip" : []
+               }
+            },
+            "name" : "@Filter/RJBS-Outdated",
+            "version" : "0.023"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PromptIfStale",
+            "config" : {
+               "Dist::Zilla::Plugin::PromptIfStale" : {
+                  "check_all_plugins" : "1",
+                  "check_all_prereqs" : 0,
+                  "modules" : [],
+                  "phase" : "release",
+                  "skip" : []
+               }
+            },
+            "name" : "@Filter/CPAN-Outdated",
+            "version" : "0.023"
          },
          {
             "class" : "Dist::Zilla::Plugin::PruneCruft",
             "name" : "@Filter/@Filter/PruneCruft",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::ManifestSkip",
             "name" : "@Filter/@Filter/ManifestSkip",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaYAML",
             "name" : "@Filter/@Filter/MetaYAML",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::License",
             "name" : "@Filter/@Filter/License",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::Readme",
             "name" : "@Filter/@Filter/Readme",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::ExecDir",
             "name" : "@Filter/@Filter/ExecDir",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::ShareDir",
             "name" : "@Filter/@Filter/ShareDir",
-            "version" : "4.300030"
-         },
-         {
-            "class" : "Dist::Zilla::Plugin::MakeMaker",
-            "name" : "@Filter/@Filter/MakeMaker",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::Manifest",
             "name" : "@Filter/@Filter/Manifest",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::TestRelease",
             "name" : "@Filter/@Filter/TestRelease",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::ConfirmRelease",
             "name" : "@Filter/@Filter/ConfirmRelease",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::UploadToCPAN",
             "name" : "@Filter/@Filter/UploadToCPAN",
-            "version" : "4.300030"
+            "version" : "5.017"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MakeMaker",
+            "config" : {
+               "Dist::Zilla::Role::TestRunner" : {
+                  "default_jobs" : 9
+               }
+            },
+            "name" : "@Filter/MakeMaker",
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::AutoPrereqs",
             "name" : "@Filter/AutoPrereqs",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::NextVersion",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::NextVersion" : {
+                  "first_version" : "0.001",
+                  "version_by_branch" : "0",
+                  "version_regexp" : "(?^:^([0-9]+\\.[0-9]+)$)"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@Filter/Git::NextVersion",
-            "version" : "2.007"
+            "version" : "2.022"
          },
          {
             "class" : "Dist::Zilla::Plugin::PkgVersion",
             "name" : "@Filter/PkgVersion",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaConfig",
             "name" : "@Filter/MetaConfig",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaJSON",
             "name" : "@Filter/MetaJSON",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::NextRelease",
             "name" : "@Filter/NextRelease",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
@@ -262,12 +324,12 @@
          {
             "class" : "Dist::Zilla::Plugin::PodSyntaxTests",
             "name" : "@Filter/PodSyntaxTests",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::ReportVersions::Tiny",
             "name" : "@Filter/ReportVersions::Tiny",
-            "version" : "1.08"
+            "version" : "1.10"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -278,57 +340,214 @@
                }
             },
             "name" : "@Filter/TestMoreWithSubtests",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::PodWeaver",
+            "config" : {
+               "Dist::Zilla::Plugin::PodWeaver" : {
+                  "config_plugins" : [
+                     "@RJBS"
+                  ],
+                  "finder" : [
+                     ":InstallModules",
+                     ":ExecFiles"
+                  ],
+                  "plugins" : [
+                     {
+                        "class" : "Pod::Weaver::Plugin::EnsurePod5",
+                        "name" : "@CorePrep/EnsurePod5",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Plugin::H1Nester",
+                        "name" : "@CorePrep/H1Nester",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Plugin::SingleEncoding",
+                        "name" : "@RJBS/SingleEncoding",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Name",
+                        "name" : "@RJBS/Name",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Version",
+                        "name" : "@RJBS/Version",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Region",
+                        "name" : "@RJBS/Prelude",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Generic",
+                        "name" : "@RJBS/Synopsis",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Generic",
+                        "name" : "@RJBS/Description",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Generic",
+                        "name" : "@RJBS/Overview",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Generic",
+                        "name" : "@RJBS/Stability",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Collect",
+                        "name" : "Attributes",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Collect",
+                        "name" : "Methods",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Collect",
+                        "name" : "Functions",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Leftovers",
+                        "name" : "@RJBS/Leftovers",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Region",
+                        "name" : "@RJBS/postlude",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Authors",
+                        "name" : "@RJBS/Authors",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Legal",
+                        "name" : "@RJBS/Legal",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Plugin::Transformer",
+                        "name" : "@RJBS/List",
+                        "version" : "4.006"
+                     }
+                  ]
+               }
+            },
             "name" : "@Filter/PodWeaver",
-            "version" : "3.101641"
+            "version" : "4.005"
          },
          {
             "class" : "Dist::Zilla::Plugin::GithubMeta",
             "name" : "@Filter/GithubMeta",
-            "version" : "0.28"
+            "version" : "0.46"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Check",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Check" : {
+                  "untracked_files" : "die"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [
+                     "dist.ini",
+                     "Changes"
+                  ],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@Filter/@Git/Check",
-            "version" : "2.007"
+            "version" : "2.022"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Commit",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Commit" : {
+                  "add_files_in" : [],
+                  "commit_msg" : "v%v%n%n%c",
+                  "time_zone" : "local"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [
+                     "dist.ini",
+                     "Changes"
+                  ],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@Filter/@Git/Commit",
-            "version" : "2.007"
+            "version" : "2.022"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Tag",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Tag" : {
+                  "branch" : null,
+                  "signed" : 0,
+                  "tag" : "5.019",
+                  "tag_format" : "%v",
+                  "tag_message" : "v%v",
+                  "time_zone" : "local"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@Filter/@Git/Tag",
-            "version" : "2.007"
+            "version" : "2.022"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Push",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Push" : {
+                  "push_to" : [
+                     "origin :",
+                     "github :"
+                  ],
+                  "remotes_must_exist" : 0
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@Filter/@Git/Push",
-            "version" : "2.007"
-         },
-         {
-            "class" : "Dist::Zilla::Plugin::Test::Compile",
-            "name" : "Test::Compile",
-            "version" : "1.112820"
+            "version" : "2.022"
          },
          {
             "class" : "Dist::Zilla::Plugin::ModuleShareDirs",
             "name" : "ModuleShareDirs",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaNoIndex",
             "name" : "MetaNoIndex",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaResources",
             "name" : "MetaResources",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -339,7 +558,7 @@
                }
             },
             "name" : "TestRequires",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -350,7 +569,7 @@
                }
             },
             "name" : "RuntimeRecommends",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -361,7 +580,7 @@
                }
             },
             "name" : "Prereqs",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::RemovePrereqs",
@@ -375,42 +594,52 @@
                }
             },
             "name" : "RemovePrereqs",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::CPANFile",
             "name" : "CPANFile",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":InstallModules",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":IncModules",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":TestFiles",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":ExecFiles",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":ShareFiles",
-            "version" : "4.300030"
+            "version" : "5.017"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":MainModule",
-            "version" : "4.300030"
+            "version" : "5.017"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":AllFiles",
+            "version" : "5.017"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":NoFiles",
+            "version" : "5.017"
          }
       ],
       "zilla" : {
@@ -418,7 +647,7 @@
          "config" : {
             "is_trial" : "0"
          },
-         "version" : "4.300030"
+         "version" : "5.017"
       }
    }
 }
@@ -3,215 +3,262 @@ abstract: 'distribution builder; installer not included!'
 author:
   - 'Ricardo SIGNES <rjbs@cpan.org>'
 build_requires:
-  File::Find: 0
-  Software::License::None: 0
-  Test::Fatal: 0
-  Test::File::ShareDir: 0
-  Test::More: 0.96
+  Software::License::None: '0'
+  Test::FailWarnings: '0'
+  Test::Fatal: '0'
+  Test::File::ShareDir: '0'
+  Test::More: '0.96'
+  lib: '0'
+  utf8: '0'
 configure_requires:
-  ExtUtils::MakeMaker: 6.30
-  File::ShareDir::Install: 0.03
+  ExtUtils::MakeMaker: '6.30'
+  File::ShareDir::Install: '0.06'
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 4.300030, CPAN::Meta::Converter version 2.120921'
+generated_by: 'Dist::Zilla version 5.017, CPAN::Meta::Converter version 2.141170'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
-  version: 1.4
+  version: '1.4'
 name: Dist-Zilla
 no_index:
   directory:
     - corpus
     - misc
 recommends:
-  Term::ReadLine::Gnu: 0
+  Archive::Tar::Wrapper: '0.15'
+  Term::ReadLine::Gnu: '0'
 requires:
-  App::Cmd::Setup: 0.309
-  App::Cmd::Tester: 0.306
-  App::Cmd::Tester::CaptureExternal: 0
-  Archive::Tar: 0
-  CPAN::Meta::Converter: 2.101550
-  CPAN::Meta::Prereqs: 2.120630
-  CPAN::Meta::Requirements: 2.121
-  CPAN::Meta::Validator: 2.101550
-  CPAN::Uploader: 0.101550
-  Carp: 0
-  Class::Load: 0.17
-  Config::INI::Reader: 0
-  Config::MVP::Assembler: 0
-  Config::MVP::Assembler::WithBundles: 0
-  Config::MVP::Reader: 2.101540
-  Config::MVP::Reader::Findable::ByExtension: 0
-  Config::MVP::Reader::Finder: 0
-  Config::MVP::Reader::INI: 2
-  Config::MVP::Section: 2.200002
-  Data::Dumper: 0
-  Data::Section: 0.004
-  DateTime: 0.44
-  Digest::MD5: 0
-  Encode: 0
-  ExtUtils::Manifest: 1.54
-  File::Copy::Recursive: 0
-  File::Find::Rule: 0
-  File::HomeDir: 0
-  File::Path: 0
-  File::ShareDir: 0
-  File::ShareDir::Install: 0.03
-  File::Spec: 0
-  File::Temp: 0
-  File::pushd: 0
-  Hash::Merge::Simple: 0
-  JSON: 2
-  List::AllUtils: 0
-  List::MoreUtils: 0
-  List::Util: 0
-  Log::Dispatchouli: 1.102220
-  Moose: 0.92
-  Moose::Autobox: 0.10
-  Moose::Role: 0
-  Moose::Util::TypeConstraints: 0
-  MooseX::LazyRequire: 0
-  MooseX::Role::Parameterized: 0
-  MooseX::SetOnce: 0
-  MooseX::Types: 0
-  MooseX::Types::Moose: 0
-  MooseX::Types::Path::Class: 0
-  MooseX::Types::Perl: 0
-  PPI: 0
-  Params::Util: 0
-  Path::Class: 0
-  Perl::PrereqScanner: 1.005
-  Perl::Version: 0
-  Pod::Eventual: 0.091480
-  Scalar::Util: 0
-  Software::License: 0.101370
-  Software::LicenseUtils: 0
-  String::Formatter: 0.100680
-  String::RewritePrefix: 0.005
-  Sub::Exporter: 0
-  Sub::Exporter::ForMethods: 0
-  Sub::Exporter::Util: 0
-  Term::ReadKey: 0
-  Term::ReadLine: 0
-  Term::UI: 0
-  Test::Deep: 0
-  Text::Glob: 0.08
-  Text::Template: 0
-  Try::Tiny: 0
-  YAML::Tiny: 0
-  autobox: 2.53
-  autodie: 0
-  namespace::autoclean: 0
-  parent: 0
+  App::Cmd::Command::version: '0'
+  App::Cmd::Setup: '0.309'
+  App::Cmd::Tester: '0.306'
+  App::Cmd::Tester::CaptureExternal: '0'
+  Archive::Tar: '0'
+  CPAN::Meta::Converter: '2.101550'
+  CPAN::Meta::Prereqs: '2.120630'
+  CPAN::Meta::Requirements: '2.121'
+  CPAN::Meta::Validator: '2.101550'
+  CPAN::Uploader: '0.103004'
+  Carp: '0'
+  Class::Load: '0.17'
+  Config::INI::Reader: '0'
+  Config::MVP::Assembler: '0'
+  Config::MVP::Assembler::WithBundles: '0'
+  Config::MVP::Reader: '2.101540'
+  Config::MVP::Reader::Findable::ByExtension: '0'
+  Config::MVP::Reader::Finder: '0'
+  Config::MVP::Reader::INI: '2'
+  Config::MVP::Section: '2.200002'
+  Data::Dumper: '0'
+  Data::Section: '0.200002'
+  DateTime: '0.44'
+  Digest::MD5: '0'
+  Encode: '0'
+  ExtUtils::Manifest: '1.54'
+  File::Copy::Recursive: '0'
+  File::Find::Rule: '0'
+  File::HomeDir: '0'
+  File::Path: '0'
+  File::ShareDir: '0'
+  File::ShareDir::Install: '0.03'
+  File::Spec: '0'
+  File::Temp: '0'
+  File::pushd: '0'
+  Hash::Merge::Simple: '0'
+  JSON: '2'
+  List::AllUtils: '0'
+  List::MoreUtils: '0'
+  List::Util: '0'
+  Log::Dispatchouli: '1.102220'
+  Mixin::Linewise::Readers: '0.100'
+  Moose: '0.92'
+  Moose::Autobox: '0.10'
+  Moose::Role: '0'
+  Moose::Util::TypeConstraints: '0'
+  MooseX::LazyRequire: '0'
+  MooseX::Role::Parameterized: '0'
+  MooseX::SetOnce: '0'
+  MooseX::Types: '0'
+  MooseX::Types::Moose: '0'
+  MooseX::Types::Path::Class: '0'
+  MooseX::Types::Perl: '0'
+  PPI: '0'
+  PPI::Document: '0'
+  Params::Util: '0'
+  Path::Class: '0.22'
+  Path::Tiny: '0'
+  Perl::PrereqScanner: '1.016'
+  Perl::Version: '0'
+  Pod::Eventual: '0.091480'
+  Scalar::Util: '0'
+  Software::License: '0.101370'
+  Software::LicenseUtils: '0'
+  Storable: '0'
+  String::Formatter: '0.100680'
+  String::RewritePrefix: '0.005'
+  Sub::Exporter: '0'
+  Sub::Exporter::ForMethods: '0'
+  Sub::Exporter::Util: '0'
+  Term::Encoding: '0'
+  Term::ReadKey: '0'
+  Term::ReadLine: '0'
+  Term::UI: '0'
+  Test::Deep: '0'
+  Text::Glob: '0.08'
+  Text::Template: '0'
+  Try::Tiny: '0'
+  YAML::Tiny: '0'
+  autobox: '2.53'
+  autodie: '0'
+  namespace::autoclean: '0'
+  parent: '0'
   perl: v5.8.5
-  strict: 0
-  version: 0
-  warnings: 0
+  strict: '0'
+  version: '0'
+  warnings: '0'
 resources:
-  X_mailing_list: http://www.listbox.com/subscribe/?list_id=139292
-  bugtracker: https://github.com/rjbs/dist-zilla/issues
+  Mailing_list: http://www.listbox.com/subscribe/?list_id=139292
+  bugtracker: https://github.com/rjbs/Dist-Zilla/issues
   homepage: http://dzil.org/
-  repository: http://github.com/rjbs/dist-zilla.git
-version: 4.300030
+  repository: https://github.com/rjbs/Dist-Zilla.git
+version: '5.019'
 x_Dist_Zilla:
   perl:
-    version: 5.017008
+    version: '5.019011'
   plugins:
     -
       class: Dist::Zilla::Plugin::Git::GatherDir
+      config:
+        Dist::Zilla::Plugin::Git::GatherDir:
+          include_untracked: '0'
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@Filter/Git::GatherDir'
-      version: 2.007
+      version: '2.022'
     -
       class: Dist::Zilla::Plugin::CheckPrereqsIndexed
       name: '@Filter/CheckPrereqsIndexed'
-      version: 0.008
+      version: '0.012'
     -
       class: Dist::Zilla::Plugin::CheckExtraTests
       name: '@Filter/CheckExtraTests'
-      version: 0.008
+      version: '0.021'
+    -
+      class: Dist::Zilla::Plugin::PromptIfStale
+      config:
+        Dist::Zilla::Plugin::PromptIfStale:
+          check_all_plugins: 0
+          check_all_prereqs: 0
+          modules:
+            - Dist::Zilla::PluginBundle::RJBS
+          phase: build
+          skip: []
+      name: '@Filter/RJBS-Outdated'
+      version: '0.023'
+    -
+      class: Dist::Zilla::Plugin::PromptIfStale
+      config:
+        Dist::Zilla::Plugin::PromptIfStale:
+          check_all_plugins: '1'
+          check_all_prereqs: 0
+          modules: []
+          phase: release
+          skip: []
+      name: '@Filter/CPAN-Outdated'
+      version: '0.023'
     -
       class: Dist::Zilla::Plugin::PruneCruft
       name: '@Filter/@Filter/PruneCruft'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::ManifestSkip
       name: '@Filter/@Filter/ManifestSkip'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::MetaYAML
       name: '@Filter/@Filter/MetaYAML'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::License
       name: '@Filter/@Filter/License'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::Readme
       name: '@Filter/@Filter/Readme'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::ExecDir
       name: '@Filter/@Filter/ExecDir'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::ShareDir
       name: '@Filter/@Filter/ShareDir'
-      version: 4.300030
-    -
-      class: Dist::Zilla::Plugin::MakeMaker
-      name: '@Filter/@Filter/MakeMaker'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::Manifest
       name: '@Filter/@Filter/Manifest'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::TestRelease
       name: '@Filter/@Filter/TestRelease'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::ConfirmRelease
       name: '@Filter/@Filter/ConfirmRelease'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::UploadToCPAN
       name: '@Filter/@Filter/UploadToCPAN'
-      version: 4.300030
+      version: '5.017'
+    -
+      class: Dist::Zilla::Plugin::MakeMaker
+      config:
+        Dist::Zilla::Role::TestRunner:
+          default_jobs: 9
+      name: '@Filter/MakeMaker'
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::AutoPrereqs
       name: '@Filter/AutoPrereqs'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::Git::NextVersion
+      config:
+        Dist::Zilla::Plugin::Git::NextVersion:
+          first_version: '0.001'
+          version_by_branch: '0'
+          version_regexp: (?^:^([0-9]+\.[0-9]+)$)
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@Filter/Git::NextVersion'
-      version: 2.007
+      version: '2.022'
     -
       class: Dist::Zilla::Plugin::PkgVersion
       name: '@Filter/PkgVersion'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::MetaConfig
       name: '@Filter/MetaConfig'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::MetaJSON
       name: '@Filter/MetaJSON'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::NextRelease
       name: '@Filter/NextRelease'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::Test::ChangesHasContent
       name: '@Filter/Test::ChangesHasContent'
-      version: 0.006
+      version: '0.006'
     -
       class: Dist::Zilla::Plugin::PodSyntaxTests
       name: '@Filter/PodSyntaxTests'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::ReportVersions::Tiny
       name: '@Filter/ReportVersions::Tiny'
-      version: 1.08
+      version: '1.10'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -219,47 +266,165 @@ x_Dist_Zilla:
           phase: test
           type: requires
       name: '@Filter/TestMoreWithSubtests'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::PodWeaver
+      config:
+        Dist::Zilla::Plugin::PodWeaver:
+          config_plugins:
+            - '@RJBS'
+          finder:
+            - ':InstallModules'
+            - ':ExecFiles'
+          plugins:
+            -
+              class: Pod::Weaver::Plugin::EnsurePod5
+              name: '@CorePrep/EnsurePod5'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Plugin::H1Nester
+              name: '@CorePrep/H1Nester'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Plugin::SingleEncoding
+              name: '@RJBS/SingleEncoding'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Name
+              name: '@RJBS/Name'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Version
+              name: '@RJBS/Version'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Region
+              name: '@RJBS/Prelude'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Generic
+              name: '@RJBS/Synopsis'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Generic
+              name: '@RJBS/Description'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Generic
+              name: '@RJBS/Overview'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Generic
+              name: '@RJBS/Stability'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Collect
+              name: Attributes
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Collect
+              name: Methods
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Collect
+              name: Functions
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Leftovers
+              name: '@RJBS/Leftovers'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Region
+              name: '@RJBS/postlude'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Authors
+              name: '@RJBS/Authors'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Legal
+              name: '@RJBS/Legal'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Plugin::Transformer
+              name: '@RJBS/List'
+              version: '4.006'
       name: '@Filter/PodWeaver'
-      version: 3.101641
+      version: '4.005'
     -
       class: Dist::Zilla::Plugin::GithubMeta
       name: '@Filter/GithubMeta'
-      version: 0.28
+      version: '0.46'
     -
       class: Dist::Zilla::Plugin::Git::Check
+      config:
+        Dist::Zilla::Plugin::Git::Check:
+          untracked_files: die
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty:
+            - dist.ini
+            - Changes
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@Filter/@Git/Check'
-      version: 2.007
+      version: '2.022'
     -
       class: Dist::Zilla::Plugin::Git::Commit
+      config:
+        Dist::Zilla::Plugin::Git::Commit:
+          add_files_in: []
+          commit_msg: v%v%n%n%c
+          time_zone: local
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty:
+            - dist.ini
+            - Changes
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@Filter/@Git/Commit'
-      version: 2.007
+      version: '2.022'
     -
       class: Dist::Zilla::Plugin::Git::Tag
+      config:
+        Dist::Zilla::Plugin::Git::Tag:
+          branch: ~
+          signed: 0
+          tag: '5.019'
+          tag_format: '%v'
+          tag_message: v%v
+          time_zone: local
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@Filter/@Git/Tag'
-      version: 2.007
+      version: '2.022'
     -
       class: Dist::Zilla::Plugin::Git::Push
+      config:
+        Dist::Zilla::Plugin::Git::Push:
+          push_to:
+            - 'origin :'
+            - 'github :'
+          remotes_must_exist: 0
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@Filter/@Git/Push'
-      version: 2.007
-    -
-      class: Dist::Zilla::Plugin::Test::Compile
-      name: Test::Compile
-      version: 1.112820
+      version: '2.022'
     -
       class: Dist::Zilla::Plugin::ModuleShareDirs
       name: ModuleShareDirs
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::MetaNoIndex
       name: MetaNoIndex
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::MetaResources
       name: MetaResources
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -267,7 +432,7 @@ x_Dist_Zilla:
           phase: test
           type: requires
       name: TestRequires
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -275,7 +440,7 @@ x_Dist_Zilla:
           phase: runtime
           type: recommends
       name: RuntimeRecommends
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -283,7 +448,7 @@ x_Dist_Zilla:
           phase: runtime
           type: requires
       name: Prereqs
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::RemovePrereqs
       config:
@@ -293,37 +458,45 @@ x_Dist_Zilla:
             - Dist::Zilla::Tester::_Role
             - Some::Package::That::Does::Not::Exist::Due::To::A::Typo
       name: RemovePrereqs
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::CPANFile
       name: CPANFile
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':InstallModules'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':IncModules'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':TestFiles'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':ExecFiles'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':ShareFiles'
-      version: 4.300030
+      version: '5.017'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':MainModule'
-      version: 4.300030
+      version: '5.017'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':AllFiles'
+      version: '5.017'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':NoFiles'
+      version: '5.017'
   zilla:
     class: Dist::Zilla::Dist::Builder
     config:
-      is_trial: 0
-    version: 4.300030
+      is_trial: '0'
+    version: '5.017'
@@ -1,4 +1,5 @@
 
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.017.
 use strict;
 use warnings;
 
@@ -7,22 +8,17 @@ use 5.008005;
 use ExtUtils::MakeMaker 6.30;
 
 use File::ShareDir::Install;
+$File::ShareDir::Install::INCLUDE_DOTFILES = 1;
+$File::ShareDir::Install::INCLUDE_DOTDIRS = 1;
 install_share module => "Dist::Zilla::MintingProfile::Default", "profiles";
 
 
 my %WriteMakefileArgs = (
   "ABSTRACT" => "distribution builder; installer not included!",
   "AUTHOR" => "Ricardo SIGNES <rjbs\@cpan.org>",
-  "BUILD_REQUIRES" => {
-    "File::Find" => 0,
-    "Software::License::None" => 0,
-    "Test::Fatal" => 0,
-    "Test::File::ShareDir" => 0,
-    "Test::More" => "0.96"
-  },
   "CONFIGURE_REQUIRES" => {
     "ExtUtils::MakeMaker" => "6.30",
-    "File::ShareDir::Install" => "0.03"
+    "File::ShareDir::Install" => "0.06"
   },
   "DISTNAME" => "Dist-Zilla",
   "EXE_FILES" => [
@@ -31,6 +27,7 @@ my %WriteMakefileArgs = (
   "LICENSE" => "perl",
   "NAME" => "Dist::Zilla",
   "PREREQ_PM" => {
+    "App::Cmd::Command::version" => 0,
     "App::Cmd::Setup" => "0.309",
     "App::Cmd::Tester" => "0.306",
     "App::Cmd::Tester::CaptureExternal" => 0,
@@ -39,7 +36,7 @@ my %WriteMakefileArgs = (
     "CPAN::Meta::Prereqs" => "2.120630",
     "CPAN::Meta::Requirements" => "2.121",
     "CPAN::Meta::Validator" => "2.101550",
-    "CPAN::Uploader" => "0.101550",
+    "CPAN::Uploader" => "0.103004",
     "Carp" => 0,
     "Class::Load" => "0.17",
     "Config::INI::Reader" => 0,
@@ -51,7 +48,7 @@ my %WriteMakefileArgs = (
     "Config::MVP::Reader::INI" => 2,
     "Config::MVP::Section" => "2.200002",
     "Data::Dumper" => 0,
-    "Data::Section" => "0.004",
+    "Data::Section" => "0.200002",
     "DateTime" => "0.44",
     "Digest::MD5" => 0,
     "Encode" => 0,
@@ -71,6 +68,7 @@ my %WriteMakefileArgs = (
     "List::MoreUtils" => 0,
     "List::Util" => 0,
     "Log::Dispatchouli" => "1.102220",
+    "Mixin::Linewise::Readers" => "0.100",
     "Moose" => "0.92",
     "Moose::Autobox" => "0.10",
     "Moose::Role" => 0,
@@ -83,19 +81,23 @@ my %WriteMakefileArgs = (
     "MooseX::Types::Path::Class" => 0,
     "MooseX::Types::Perl" => 0,
     "PPI" => 0,
+    "PPI::Document" => 0,
     "Params::Util" => 0,
-    "Path::Class" => 0,
-    "Perl::PrereqScanner" => "1.005",
+    "Path::Class" => "0.22",
+    "Path::Tiny" => 0,
+    "Perl::PrereqScanner" => "1.016",
     "Perl::Version" => 0,
     "Pod::Eventual" => "0.091480",
     "Scalar::Util" => 0,
     "Software::License" => "0.101370",
     "Software::LicenseUtils" => 0,
+    "Storable" => 0,
     "String::Formatter" => "0.100680",
     "String::RewritePrefix" => "0.005",
     "Sub::Exporter" => 0,
     "Sub::Exporter::ForMethods" => 0,
     "Sub::Exporter::Util" => 0,
+    "Term::Encoding" => 0,
     "Term::ReadKey" => 0,
     "Term::ReadLine" => 0,
     "Term::UI" => 0,
@@ -112,24 +114,123 @@ my %WriteMakefileArgs = (
     "version" => 0,
     "warnings" => 0
   },
-  "VERSION" => "4.300030",
+  "TEST_REQUIRES" => {
+    "Software::License::None" => 0,
+    "Test::FailWarnings" => 0,
+    "Test::Fatal" => 0,
+    "Test::File::ShareDir" => 0,
+    "Test::More" => "0.96",
+    "lib" => 0,
+    "utf8" => 0
+  },
+  "VERSION" => "5.019",
   "test" => {
     "TESTS" => "t/*.t t/commands/*.t t/diagnostics/*.t t/plugins/*.t"
   }
 );
 
 
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
-  my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
-  my $pp = $WriteMakefileArgs{PREREQ_PM};
-  for my $mod ( keys %$br ) {
-    if ( exists $pp->{$mod} ) {
-      $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
-    }
-    else {
-      $pp->{$mod} = $br->{$mod};
-    }
-  }
+my %FallbackPrereqs = (
+  "App::Cmd::Command::version" => 0,
+  "App::Cmd::Setup" => "0.309",
+  "App::Cmd::Tester" => "0.306",
+  "App::Cmd::Tester::CaptureExternal" => 0,
+  "Archive::Tar" => 0,
+  "CPAN::Meta::Converter" => "2.101550",
+  "CPAN::Meta::Prereqs" => "2.120630",
+  "CPAN::Meta::Requirements" => "2.121",
+  "CPAN::Meta::Validator" => "2.101550",
+  "CPAN::Uploader" => "0.103004",
+  "Carp" => 0,
+  "Class::Load" => "0.17",
+  "Config::INI::Reader" => 0,
+  "Config::MVP::Assembler" => 0,
+  "Config::MVP::Assembler::WithBundles" => 0,
+  "Config::MVP::Reader" => "2.101540",
+  "Config::MVP::Reader::Findable::ByExtension" => 0,
+  "Config::MVP::Reader::Finder" => 0,
+  "Config::MVP::Reader::INI" => 2,
+  "Config::MVP::Section" => "2.200002",
+  "Data::Dumper" => 0,
+  "Data::Section" => "0.200002",
+  "DateTime" => "0.44",
+  "Digest::MD5" => 0,
+  "Encode" => 0,
+  "ExtUtils::Manifest" => "1.54",
+  "File::Copy::Recursive" => 0,
+  "File::Find::Rule" => 0,
+  "File::HomeDir" => 0,
+  "File::Path" => 0,
+  "File::ShareDir" => 0,
+  "File::ShareDir::Install" => "0.03",
+  "File::Spec" => 0,
+  "File::Temp" => 0,
+  "File::pushd" => 0,
+  "Hash::Merge::Simple" => 0,
+  "JSON" => 2,
+  "List::AllUtils" => 0,
+  "List::MoreUtils" => 0,
+  "List::Util" => 0,
+  "Log::Dispatchouli" => "1.102220",
+  "Mixin::Linewise::Readers" => "0.100",
+  "Moose" => "0.92",
+  "Moose::Autobox" => "0.10",
+  "Moose::Role" => 0,
+  "Moose::Util::TypeConstraints" => 0,
+  "MooseX::LazyRequire" => 0,
+  "MooseX::Role::Parameterized" => 0,
+  "MooseX::SetOnce" => 0,
+  "MooseX::Types" => 0,
+  "MooseX::Types::Moose" => 0,
+  "MooseX::Types::Path::Class" => 0,
+  "MooseX::Types::Perl" => 0,
+  "PPI" => 0,
+  "PPI::Document" => 0,
+  "Params::Util" => 0,
+  "Path::Class" => "0.22",
+  "Path::Tiny" => 0,
+  "Perl::PrereqScanner" => "1.016",
+  "Perl::Version" => 0,
+  "Pod::Eventual" => "0.091480",
+  "Scalar::Util" => 0,
+  "Software::License" => "0.101370",
+  "Software::License::None" => 0,
+  "Software::LicenseUtils" => 0,
+  "Storable" => 0,
+  "String::Formatter" => "0.100680",
+  "String::RewritePrefix" => "0.005",
+  "Sub::Exporter" => 0,
+  "Sub::Exporter::ForMethods" => 0,
+  "Sub::Exporter::Util" => 0,
+  "Term::Encoding" => 0,
+  "Term::ReadKey" => 0,
+  "Term::ReadLine" => 0,
+  "Term::UI" => 0,
+  "Test::Deep" => 0,
+  "Test::FailWarnings" => 0,
+  "Test::Fatal" => 0,
+  "Test::File::ShareDir" => 0,
+  "Test::More" => "0.96",
+  "Text::Glob" => "0.08",
+  "Text::Template" => 0,
+  "Try::Tiny" => 0,
+  "YAML::Tiny" => 0,
+  "autobox" => "2.53",
+  "autodie" => 0,
+  "lib" => 0,
+  "namespace::autoclean" => 0,
+  "parent" => 0,
+  "strict" => 0,
+  "utf8" => 0,
+  "version" => 0,
+  "warnings" => 0
+);
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+  delete $WriteMakefileArgs{TEST_REQUIRES};
+  delete $WriteMakefileArgs{BUILD_REQUIRES};
+  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
 }
 
 delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
@@ -1,13 +1,15 @@
 
 
 This archive contains the distribution Dist-Zilla,
-version 4.300030:
+version 5.019:
 
   distribution builder; installer not included!
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
 
 
+This README file was generated by Dist::Zilla::Plugin::Readme v5.017.
+
@@ -11,17 +11,26 @@ $main::VERSION = $Dist::Zilla::App::VERSION;
 # ABSTRACT: do stuff with your dist
 Dist::Zilla::App->run;
 
+#pod =head1 OVERVIEW
+#pod
+#pod For help with Dist::Zilla, start with http://dzil.org/ or by running "dzil
+#pod commands"
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 dzil - do stuff with your dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 OVERVIEW
 
@@ -34,7 +43,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -5,9 +5,15 @@ license = Perl_5
 copyright_holder = foobar
 copyright_year   = 2009
 
+; authordep perl = 5.005
+
 [GatherDir]
 [ExecDir]
 [AutoPrereqs]
 skip = ^DZPA::Skip
 [MetaYAML]
 version = 2
+
+[Encoding]
+encoding = bytes
+filename = t/data.bin
@@ -0,0 +1 @@
+pretend this is binary, OK?
@@ -0,0 +1,4 @@
+Revision history for {{$dist->name}}
+
+{{$NEXT}}
+        - Olivier Mengué was here!
@@ -0,0 +1,10 @@
+name    = DZ-NonAscii
+version = 0.001
+author  = Olivier Mengué <dolmen@example.org>
+author  = 김도형 <keedi@example.com>
+license = Perl_5
+copyright_holder = ภูมิพลอดุลยเดช
+
+[@Classic]
+[MetaJSON]
+[NextRelease]
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+package DZ1;
+# ABSTRACT: this is a sample package for testing Dist::Zilla;
+
+sub main {
+  return 1;
+}
+
+1;
@@ -0,0 +1 @@
+some random data that should be shared...
@@ -1,3 +1,4 @@
+requires "App::Cmd::Command::version" => "0";
 requires "App::Cmd::Setup" => "0.309";
 requires "App::Cmd::Tester" => "0.306";
 requires "App::Cmd::Tester::CaptureExternal" => "0";
@@ -6,7 +7,7 @@ requires "CPAN::Meta::Converter" => "2.101550";
 requires "CPAN::Meta::Prereqs" => "2.120630";
 requires "CPAN::Meta::Requirements" => "2.121";
 requires "CPAN::Meta::Validator" => "2.101550";
-requires "CPAN::Uploader" => "0.101550";
+requires "CPAN::Uploader" => "0.103004";
 requires "Carp" => "0";
 requires "Class::Load" => "0.17";
 requires "Config::INI::Reader" => "0";
@@ -18,7 +19,7 @@ requires "Config::MVP::Reader::Finder" => "0";
 requires "Config::MVP::Reader::INI" => "2";
 requires "Config::MVP::Section" => "2.200002";
 requires "Data::Dumper" => "0";
-requires "Data::Section" => "0.004";
+requires "Data::Section" => "0.200002";
 requires "DateTime" => "0.44";
 requires "Digest::MD5" => "0";
 requires "Encode" => "0";
@@ -38,6 +39,7 @@ requires "List::AllUtils" => "0";
 requires "List::MoreUtils" => "0";
 requires "List::Util" => "0";
 requires "Log::Dispatchouli" => "1.102220";
+requires "Mixin::Linewise::Readers" => "0.100";
 requires "Moose" => "0.92";
 requires "Moose::Autobox" => "0.10";
 requires "Moose::Role" => "0";
@@ -50,19 +52,23 @@ requires "MooseX::Types::Moose" => "0";
 requires "MooseX::Types::Path::Class" => "0";
 requires "MooseX::Types::Perl" => "0";
 requires "PPI" => "0";
+requires "PPI::Document" => "0";
 requires "Params::Util" => "0";
-requires "Path::Class" => "0";
-requires "Perl::PrereqScanner" => "1.005";
+requires "Path::Class" => "0.22";
+requires "Path::Tiny" => "0";
+requires "Perl::PrereqScanner" => "1.016";
 requires "Perl::Version" => "0";
 requires "Pod::Eventual" => "0.091480";
 requires "Scalar::Util" => "0";
 requires "Software::License" => "0.101370";
 requires "Software::LicenseUtils" => "0";
+requires "Storable" => "0";
 requires "String::Formatter" => "0.100680";
 requires "String::RewritePrefix" => "0.005";
 requires "Sub::Exporter" => "0";
 requires "Sub::Exporter::ForMethods" => "0";
 requires "Sub::Exporter::Util" => "0";
+requires "Term::Encoding" => "0";
 requires "Term::ReadKey" => "0";
 requires "Term::ReadLine" => "0";
 requires "Term::UI" => "0";
@@ -79,19 +85,22 @@ requires "perl" => "v5.8.5";
 requires "strict" => "0";
 requires "version" => "0";
 requires "warnings" => "0";
+recommends "Archive::Tar::Wrapper" => "0.15";
 recommends "Term::ReadLine::Gnu" => "0";
 
 on 'test' => sub {
-  requires "File::Find" => "0";
   requires "Software::License::None" => "0";
+  requires "Test::FailWarnings" => "0";
   requires "Test::Fatal" => "0";
   requires "Test::File::ShareDir" => "0";
   requires "Test::More" => "0.96";
+  requires "lib" => "0";
+  requires "utf8" => "0";
 };
 
 on 'configure' => sub {
   requires "ExtUtils::MakeMaker" => "6.30";
-  requires "File::ShareDir::Install" => "0.03";
+  requires "File::ShareDir::Install" => "0.06";
 };
 
 on 'develop' => sub {
@@ -5,12 +5,8 @@ copyright_holder = Ricardo SIGNES
 
 [@Filter]
 -bundle = @RJBS
--remove = Test::Compile
 github_issues = 1
 
-[Test::Compile]
-skip = Dist::Zilla::Tutorial
-
 [ModuleShareDirs]
 Dist::Zilla::MintingProfile::Default = profiles
 
@@ -20,9 +16,6 @@ dir = misc
 
 [MetaResources]
 homepage        = http://dzil.org/
-repository.web  = http://github.com/rjbs/dist-zilla
-repository.url  = http://github.com/rjbs/dist-zilla.git
-repository.type = git
 x_mailing_list  = http://www.listbox.com/subscribe/?list_id=139292
 
 [Prereqs / TestRequires]
@@ -30,6 +23,7 @@ Test::More = 0.90
 
 [Prereqs / RuntimeRecommends]
 Term::ReadLine::Gnu = 0
+Archive::Tar::Wrapper = 0.15
 
 [Prereqs]
 perl    = v5.8.5 ; how tempted am I to set this to v5.10?  very!
@@ -39,8 +33,11 @@ parent  = 0 ; used by the AutoPrereq test corpus
 
 File::ShareDir::Install  = 0.03 ; for EUMM
 Class::Load              = 0.17
-Config::MVP::Reader::INI = 2    ; ensure there's a basic config format
-ExtUtils::Manifest       = 1.54 ; for ManifestSkip that needs maniskip()
+Config::MVP::Reader::INI = 2        ; ensure there's a basic config format
+Data::Section            = 0.200000 ; default encodings to UTF-8
+ExtUtils::Manifest       = 1.54     ; for ManifestSkip that needs maniskip()
+Mixin::Linewise::Readers = 0.100    ; default encodings to UTF-8
+Path::Class              = 0.22     ; basename
 
 [RemovePrereqs]
 remove = Config ; why isn't this indexed?? -- rjbs, 2011-02-11
@@ -1,14 +1,22 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::add;
-{
-  $Dist::Zilla::App::Command::add::VERSION = '4.300030';
-}
 # ABSTRACT: add a module to a dist
+$Dist::Zilla::App::Command::add::VERSION = '5.019';
 use Dist::Zilla::App -command;
 use Path::Class;
 use File::pushd ();
 
+#pod =head1 SYNOPSIS
+#pod
+#pod Adds a new module to a Dist::Zilla-based distribution
+#pod
+#pod   $ dzil add Some::New::Module
+#pod
+#pod There are two arguments, C<-p> and C<-P>. C<-P> specify the minting profile
+#pod provider and C<-p> - the profile name. These work just like C<dzil new>.
+#pod
+#pod =cut
 
 sub abstract { 'add modules to an existing dist' }
 
@@ -56,12 +64,14 @@ sub execute {
   my $root = dir($zilla->root)->absolute;
   my $wd = File::pushd::pushd($minter->root);
 
+  my $factory = $minter->plugin_named(':DefaultModuleMaker');
+
   for my $name ( @$arg ) {
-    my $factory = $minter->plugin_named(':DefaultModuleMaker');
     $factory->make_module({ name => $name });
-    for my $file ( @{ $factory->zilla->files} ) {
-      $zilla->_write_out_file($file, $root);
-    }
+  }
+
+  for my $file ( @{ $factory->zilla->files} ) {
+    $zilla->_write_out_file($file, $root);
   }
 }
 
@@ -71,17 +81,19 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::add - add a module to a dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
-Adds a a new module to a Dist::Zilla-based distribution
+Adds a new module to a Dist::Zilla-based distribution
 
   $ dzil add Some::New::Module
 
@@ -94,7 +106,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,22 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::authordeps;
-{
-  $Dist::Zilla::App::Command::authordeps::VERSION = '4.300030';
-}
-use Dist::Zilla::App -command;
 # ABSTRACT: List your distribution's author dependencies
+$Dist::Zilla::App::Command::authordeps::VERSION = '5.019';
+use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   $ dzil authordeps
+#pod
+#pod This will scan the F<dist.ini> file and print a list of plugin modules that
+#pod probably need to be installed for the dist to be buildable.  This is a very
+#pod naive scan, but tends to be pretty accurate.  Modules can be added to its
+#pod results by using special comments in the form:
+#pod
+#pod   ; authordep Some::Package
+#pod
+#pod =cut
 
 sub abstract { "list your distribution's author dependencies" }
 
@@ -42,13 +52,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::authordeps - List your distribution's author dependencies
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -67,7 +79,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,32 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::build;
-{
-  $Dist::Zilla::App::Command::build::VERSION = '4.300030';
-}
 # ABSTRACT: build your dist
+$Dist::Zilla::App::Command::build::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   dzil build [ --trial ] [ --tgz | --no-tgz ] [ --in /path/to/build/dir ]
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This command is a very thin layer over the Dist::Zilla C<build> method, which
+#pod does all the things required to build your distribution.  By default, it will
+#pod also archive your distribution and leave you with a complete, ready-to-release
+#pod distribution tarball.
+#pod
+#pod =cut
 
 sub abstract { 'build your dist' }
 
+#pod =head1 EXAMPLE
+#pod
+#pod   $ dzil build
+#pod   $ dzil build --no-tgz
+#pod   $ dzil build --in /path/to/build/dir
+#pod
+#pod =cut
 
 sub opt_spec {
   [ 'trial'  => 'build a trial release that PAUSE will not index'      ],
@@ -17,6 +34,25 @@ sub opt_spec {
   [ 'in=s'   => 'the directory in which to build the distribution'     ]
 }
 
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --trial
+#pod
+#pod This will build a trial distribution.  Among other things, it will generally
+#pod mean that the built tarball's basename ends in F<-TRIAL>.
+#pod
+#pod =head2 --tgz | --no-tgz
+#pod
+#pod Builds a .tar.gz in your project directory after building the distribution.
+#pod
+#pod --tgz behaviour is by default, use --no-tgz to disable building an archive.
+#pod
+#pod =head2 --in
+#pod
+#pod Specifies the directory into which the distribution should be built.  If
+#pod necessary, the directory will be created.  An archive will not be created.
+#pod
+#pod =cut
 
 sub execute {
   my ($self, $opt, $args) = @_;
@@ -37,13 +73,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::build - build your dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -86,7 +124,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,17 +1,32 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::clean;
-{
-  $Dist::Zilla::App::Command::clean::VERSION = '4.300030';
-}
 # ABSTRACT: clean up after build, test, or install
+$Dist::Zilla::App::Command::clean::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   dzil clean [ --dry-run|-n ]
+#pod
+#pod This command removes some files that are created during build, test, and
+#pod install.  It's a very thin layer over the C<L<clean|Dist::Zilla/clean>> method
+#pod on the Dist::Zilla object.  The documentation for that method gives more
+#pod information about the files that will be removed.
+#pod
+#pod =cut
 
 sub opt_spec {
   [ 'dry-run|n'   => 'don\'t actually remove anything, just show what would be done' ],
 }
 
+#pod =head1 OPTIONS
+#pod
+#pod =head2 -n, --dry-run
+#pod
+#pod Nothing is removed; instead, everything that would be removed will be listed.
+#pod
+#pod =cut
 
 sub abstract { 'clean up after build, test, or install' }
 
@@ -27,13 +42,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::clean - clean up after build, test, or install
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -56,7 +73,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,19 +1,47 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::install;
-{
-  $Dist::Zilla::App::Command::install::VERSION = '4.300030';
-}
 # ABSTRACT: install your dist
+$Dist::Zilla::App::Command::install::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod Installs your distribution using a specified command.
+#pod
+#pod     dzil install [--install-command="cmd"]
+#pod
+#pod =cut
 sub abstract { 'install your dist' }
 
+#pod =head1 EXAMPLE
+#pod
+#pod     $ dzil install
+#pod     $ dzil install --install-command="cpan ."
+#pod
+#pod =cut
 
 sub opt_spec {
   [ 'install-command=s', 'command to run to install (e.g. "cpan .")' ],
+  [ 'keep-build-dir|keep' => 'keep the build directory even after a success' ],
 }
 
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --install-command
+#pod
+#pod This defines what command to run after building the dist in the dist dir.
+#pod
+#pod Any value that works with L<C<system>|perlfunc/system> is accepted.
+#pod
+#pod If not specified, calls (roughly):
+#pod
+#pod     cpanm .
+#pod
+#pod For more information, look at the L<install|Dist::Zilla::Dist::Builder/install> method in
+#pod Dist::Zilla.
+#pod
+#pod =cut
 
 sub execute {
   my ($self, $opt, $arg) = @_;
@@ -22,6 +50,9 @@ sub execute {
     $opt->install_command
       ? (install_command => [ $opt->install_command ])
       : (),
+    $opt->keep_build_dir
+      ? (keep_build_dir => 1)
+      : (),
   });
 }
 
@@ -31,13 +62,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::install - install your dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -60,7 +93,7 @@ Any value that works with L<C<system>|perlfunc/system> is accepted.
 
 If not specified, calls (roughly):
 
-    perl -MCPAN -einstall "."
+    cpanm .
 
 For more information, look at the L<install|Dist::Zilla::Dist::Builder/install> method in
 Dist::Zilla.
@@ -71,7 +104,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,47 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::listdeps;
-{
-  $Dist::Zilla::App::Command::listdeps::VERSION = '4.300030';
-}
-use Dist::Zilla::App -command;
 # ABSTRACT: print your distribution's prerequisites
+$Dist::Zilla::App::Command::listdeps::VERSION = '5.019';
+use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   $ dzil listdeps | cpan
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a command plugin for L<Dist::Zilla>. It provides the C<listdeps>
+#pod command, which prints your distribution's prerequisites. You could pipe that
+#pod list to a CPAN client like L<cpan> to install all of the dependencies in one
+#pod quick go.
+#pod
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --author
+#pod
+#pod Include author dependencies (those listed under C<develop_requires>).
+#pod
+#pod =head2 --missing
+#pod
+#pod List only dependencies which are unsatisfied.
+#pod
+#pod =head2 --versions
+#pod
+#pod Also display the required versions of listed modules.
+#pod
+#pod =head2 --json
+#pod
+#pod Lists all prerequisites in JSON format, as they would appear in META.json
+#pod (broken out into phases and types)
+#pod
+#pod =head1 ACKNOWLEDGEMENTS
+#pod
+#pod This code was originally more or less a direct copy of Marcel Gruenauer (hanekomu)
+#pod Dist::Zilla::App::Command::prereqs, updated to work with the Dist::Zilla v2
+#pod API.
+#pod
+#pod =cut
 
 use Try::Tiny;
 
@@ -15,21 +50,30 @@ sub abstract { "print your distribution's prerequisites" }
 sub opt_spec {
   [ 'author', 'include author dependencies' ],
   [ 'missing', 'list only the missing dependencies' ],
-  [ 'versions', 'include required version numbers in listing' ]
+  [ 'versions', 'include required version numbers in listing' ],
+  [ 'json', 'list dependencies by phase, in JSON format' ],
 }
 
-sub extract_dependencies {
-  my ($self, $zilla, $phases, $missing) = @_;
+sub prereqs {
+  my ($self, $zilla) = @_;
 
   $_->before_build for @{ $zilla->plugins_with(-BeforeBuild) };
   $_->gather_files for @{ $zilla->plugins_with(-FileGatherer) };
+  $_->set_file_encodings for @{ $zilla->plugins_with(-EncodingProvider) };
   $_->prune_files  for @{ $zilla->plugins_with(-FilePruner) };
   $_->munge_files  for @{ $zilla->plugins_with(-FileMunger) };
   $_->register_prereqs for @{ $zilla->plugins_with(-PrereqSource) };
 
+  my $prereqs = $zilla->prereqs;
+}
+
+sub extract_dependencies {
+  my ($self, $zilla, $phases, $missing) = @_;
+
+  my $prereqs = $self->prereqs($zilla);
+
   require CPAN::Meta::Requirements;
   my $req = CPAN::Meta::Requirements->new;
-  my $prereqs = $zilla->prereqs;
 
   for my $phase (@$phases) {
     $req->add_requirements( $prereqs->requirements_for($phase, 'requires') );
@@ -66,6 +110,15 @@ sub execute {
   my @phases = qw(build test configure runtime);
   push @phases, 'develop' if $opt->author;
 
+  if($opt->json) {
+    my $prereqs = $self->prereqs($self->zilla);
+    my $output = $prereqs->as_string_hash;
+
+    require JSON; JSON->VERSION(2);
+    print JSON->new->ascii(1)->canonical(1)->pretty->encode($output), "\n";
+    return 1;
+  }
+
   my %modules = $self->extract_dependencies($self->zilla, \@phases, $opt->missing);
 
   if($opt->versions) {
@@ -83,13 +136,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::listdeps - print your distribution's prerequisites
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -99,7 +154,7 @@ version 4.300030
 
 This is a command plugin for L<Dist::Zilla>. It provides the C<listdeps>
 command, which prints your distribution's prerequisites. You could pipe that
-list to a CPAN client like L<cpan> to install all of the dependecies in one
+list to a CPAN client like L<cpan> to install all of the dependencies in one
 quick go.
 
 =head1 OPTIONS
@@ -116,9 +171,14 @@ List only dependencies which are unsatisfied.
 
 Also display the required versions of listed modules.
 
+=head2 --json
+
+Lists all prerequisites in JSON format, as they would appear in META.json
+(broken out into phases and types)
+
 =head1 ACKNOWLEDGEMENTS
 
-This code is more or less a direct copy of Marcel Gruenauer (hanekomu)
+This code was originally more or less a direct copy of Marcel Gruenauer (hanekomu)
 Dist::Zilla::App::Command::prereqs, updated to work with the Dist::Zilla v2
 API.
 
@@ -128,7 +188,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,37 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::new;
-{
-  $Dist::Zilla::App::Command::new::VERSION = '4.300030';
-}
 # ABSTRACT: mint a new dist
+$Dist::Zilla::App::Command::new::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod Creates a new Dist-Zilla based distribution under the current directory.
+#pod
+#pod   $ dzil new Main::Module::Name
+#pod
+#pod There are two arguments, C<-p> and C<-P>. C<-P> specify the minting profile
+#pod provider and C<-p> - the profile name.
+#pod
+#pod The default profile provider first looks in the
+#pod F<~/.dzil/profiles/$profile_name> and then among standard profiles, shipped
+#pod with Dist::Zilla. For example:
+#pod
+#pod   $ dzil new -p work Corporate::Library
+#pod
+#pod This command would instruct C<dzil> to look in F<~/.dzil/profiles/work> for a
+#pod F<profile.ini> (or other "profile" config file).  If no profile name is given,
+#pod C<dzil> will look for the C<default> profile.  If no F<default> directory
+#pod exists, it will use a very simple configuration shipped with Dist::Zilla.
+#pod
+#pod   $ dzil new -P Foo Corporate::Library
+#pod
+#pod This command would instruct C<dzil> to consult the Foo provider about the
+#pod directory of 'default' profile.
+#pod
+#pod
+#pod =cut
 
 sub abstract { 'mint a new dist' }
 
@@ -66,13 +91,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::new - mint a new dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -105,7 +132,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,21 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::nop;
-{
-  $Dist::Zilla::App::Command::nop::VERSION = '4.300030';
-}
 # ABSTRACT: initialize dzil, then exit
+$Dist::Zilla::App::Command::nop::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod This command does nothing.  It initializes Dist::Zilla, then exits.  This is
+#pod useful to see the logging output of plugin initialization.
+#pod
+#pod   dzil nop -v
+#pod
+#pod Seriously, this command is almost entirely for diagnostic purposes.  Don't
+#pod overthink it, okay?
+#pod
+#pod =cut
 
 sub abstract { 'do nothing: initialize dzil, then exit' }
 
@@ -22,13 +31,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::nop - initialize dzil, then exit
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -46,7 +57,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,22 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::release;
-{
-  $Dist::Zilla::App::Command::release::VERSION = '4.300030';
-}
 # ABSTRACT: release your dist to the CPAN
+$Dist::Zilla::App::Command::release::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   dzil release
+#pod
+#pod   dzil release --trial
+#pod
+#pod This command is a very, very thin wrapper around the
+#pod C<L<release|Dist::Zilla/release>> method on the Dist::Zilla object.  It will
+#pod build, archive, and release your distribution using your Releaser plugins.  The
+#pod only option, C<--trial>, will cause it to build a trial build.
+#pod
+#pod =cut
 
 sub abstract { 'release your dist' }
 
@@ -30,13 +40,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::release - release your dist to the CPAN
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -55,7 +67,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,49 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::run;
-{
-  $Dist::Zilla::App::Command::run::VERSION = '4.300030';
-}
 # ABSTRACT: run stuff in a dir where your dist is built
+$Dist::Zilla::App::Command::run::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   $ dzil run ./bin/myscript
+#pod   $ dzil run prove -bv t/mytest.t
+#pod   $ dzil run bash
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This command will build your dist with Dist::Zilla, then build the
+#pod distribution and then run a command in the build directory.  It's something
+#pod like doing this:
+#pod
+#pod   dzil build
+#pod   rsync -avp My-Project-version/ .build/
+#pod   cd .build
+#pod   perl Makefile.PL            # or perl Build.PL
+#pod   make                        # or ./Build
+#pod   export PERL5LIB=$PWD/blib/lib:$PWD/blib/arch
+#pod   <your command as defined by rest of params>
+#pod
+#pod Except for the fact it's built directly in a subdir of .build (like
+#pod F<.build/69105y2>).
+#pod
+#pod A command returning with an non-zero error code will left the build directory
+#pod behind for analysis, and C<dzil> will exit with a non-zero status.  Otherwise,
+#pod the build directory will be removed and dzil will exit with status zero.
+#pod
+#pod If no run command is provided, a new default shell is invoked. This can be
+#pod useful for testing your distribution as if it were installed.
+#pod
+#pod =cut
 
 sub abstract { 'run stuff in a dir where your dist is built' }
 
+sub opt_spec {
+  [ 'build!' => 'do the Build actions before running the command; done by default',
+                { default => 1 } ],
+}
+
 sub usage_desc {
   return '%c run %o [ run command [ arg1 arg2 ... ] ]';
 }
@@ -26,7 +60,7 @@ sub execute {
     $self->log("no command supplied to run so using \$$envname: $args->[0]");
   }
 
-  $self->zilla->run_in_build($args);
+  $self->zilla->run_in_build($args, { build => $opt->build });
 }
 
 1;
@@ -35,13 +69,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::run - run stuff in a dir where your dist is built
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -79,7 +115,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,23 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::setup;
-{
-  $Dist::Zilla::App::Command::setup::VERSION = '4.300030';
-}
 # ABSTRACT: set up a basic global config file
+$Dist::Zilla::App::Command::setup::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   $ dzil setup
+#pod   Enter your name> Ricardo Signes
+#pod   ...
+#pod
+#pod Dist::Zilla looks for per-user configuration in F<~/.dzil/config.ini>.  This
+#pod command prompts the user for some basic information that can be used to produce
+#pod the most commonly needed F<config.ini> sections.
+#pod
+#pod B<WARNING>: PAUSE account details are stored within config.ini in plain text.
+#pod
+#pod =cut
 
 use autodie;
 
@@ -77,7 +88,9 @@ sub execute {
 
   if (
     $chrome->prompt_yn(
-      'Do you want to enter your PAUSE account details? ',
+    '
+    * WARNING - Your account details will be stored in plain text *
+Do you want to enter your PAUSE account details? ',
       { default => 0 },
     )
   ) {
@@ -98,11 +111,14 @@ sub execute {
       "What is your PAUSE password? ",
       {
         check   => sub { defined $_[0] and length $_[0] },
+        noecho  => 1,
       },
     );
   }
 
   $config_root->mkpath unless -d $config_root;
+  $config_root->subdir('profiles')->mkpath
+    unless -d $config_root->subdir('profiles');
 
   my $umask = umask;
   umask( $umask | 077 ); # this file might contain PAUSE pw; make it go-r
@@ -138,13 +154,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::setup - set up a basic global config file
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -156,13 +174,15 @@ Dist::Zilla looks for per-user configuration in F<~/.dzil/config.ini>.  This
 command prompts the user for some basic information that can be used to produce
 the most commonly needed F<config.ini> sections.
 
+B<WARNING>: PAUSE account details are stored within config.ini in plain text.
+
 =head1 AUTHOR
 
 Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,34 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::smoke;
-{
-  $Dist::Zilla::App::Command::smoke::VERSION = '4.300030';
-}
 # ABSTRACT: smoke your dist
+$Dist::Zilla::App::Command::smoke::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   dzil smoke [ --release ] [ --author ] [ --no-automated ]
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This command builds and tests the distribution in "smoke testing mode."
+#pod
+#pod This command is a thin wrapper around the L<test|Dist::Zilla::Dist::Builder/test> method in
+#pod Dist::Zilla.  It builds your dist and runs the tests with the AUTOMATED_TESTING
+#pod environment variable turned on, so it's like doing this:
+#pod
+#pod   export AUTOMATED_TESTING=1
+#pod   dzil build --no-tgz
+#pod   cd $BUILD_DIRECTORY
+#pod   perl Makefile.PL
+#pod   make
+#pod   make test
+#pod
+#pod A build that fails tests will be left behind for analysis, and F<dzil> will
+#pod exit a non-zero value.  If the tests are successful, the build directory will
+#pod be removed and F<dzil> will exit with status 0.
+#pod
+#pod =cut
 
 sub opt_spec {
   [ 'release'   => 'enables the RELEASE_TESTING env variable', { default => 0 } ],
@@ -14,6 +36,21 @@ sub opt_spec {
   [ 'author' => 'enables the AUTHOR_TESTING env variable', { default => 0 } ]
 }
 
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --release
+#pod
+#pod This will run the test suite with RELEASE_TESTING=1
+#pod
+#pod =head2 --no-automated
+#pod
+#pod This will run the test suite without setting AUTOMATED_TESTING
+#pod
+#pod =head2 --author
+#pod
+#pod This will run the test suite with AUTHOR_TESTING=1
+#pod
+#pod =cut
 
 sub abstract { 'smoke your dist' }
 
@@ -33,13 +70,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::smoke - smoke your dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -84,7 +123,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,20 +1,61 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command::test;
-{
-  $Dist::Zilla::App::Command::test::VERSION = '4.300030';
-}
 # ABSTRACT: test your dist
+$Dist::Zilla::App::Command::test::VERSION = '5.019';
 use Dist::Zilla::App -command;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   dzil test [ --release ] [ --no-author ] [ --automated ] [ --all ]
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This command is a thin wrapper around the L<test|Dist::Zilla::Dist::Builder/test> method in
+#pod Dist::Zilla.  It builds your dist and runs the tests with the AUTHOR_TESTING
+#pod environment variable turned on, so it's like doing this:
+#pod
+#pod   export AUTHOR_TESTING=1
+#pod   dzil build --no-tgz
+#pod   cd $BUILD_DIRECTORY
+#pod   perl Makefile.PL
+#pod   make
+#pod   make test
+#pod
+#pod A build that fails tests will be left behind for analysis, and F<dzil> will
+#pod exit a non-zero value.  If the tests are successful, the build directory will
+#pod be removed and F<dzil> will exit with status 0.
+#pod
+#pod =cut
 
 sub opt_spec {
   [ 'release'   => 'enables the RELEASE_TESTING env variable', { default => 0 } ],
   [ 'automated' => 'enables the AUTOMATED_TESTING env variable', { default => 0 } ],
   [ 'author!' => 'enables the AUTHOR_TESTING env variable (default behavior)', { default => 1 } ],
-  [ 'all' => 'enables the RELEASE_TESTING, AUTOMATED_TESTING and AUTHOR_TESTING env variables', { default => 0 } ]
+  [ 'all' => 'enables the RELEASE_TESTING, AUTOMATED_TESTING and AUTHOR_TESTING env variables', { default => 0 } ],
+  [ 'keep-build-dir|keep' => 'keep the build directory even after a success' ],
+  [ 'jobs|j=i' => 'number of parallel test jobs to run' ],
 }
 
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --release
+#pod
+#pod This will run the test suite with RELEASE_TESTING=1
+#pod
+#pod =head2 --automated
+#pod
+#pod This will run the test suite with AUTOMATED_TESTING=1
+#pod
+#pod =head2 --no-author
+#pod
+#pod This will run the test suite without setting AUTHOR_TESTING
+#pod
+#pod =head2 --all
+#pod
+#pod Equivalent to --release --automated --author
+#pod
+#pod =cut
 
 sub abstract { 'test your dist' }
 
@@ -25,7 +66,14 @@ sub execute {
   local $ENV{AUTHOR_TESTING} = 1 if $opt->author or $opt->all;
   local $ENV{AUTOMATED_TESTING} = 1 if $opt->automated or $opt->all;
 
-  $self->zilla->test;
+  $self->zilla->test({
+    $opt->keep_build_dir
+      ? (keep_build_dir => 1)
+      : (),
+    $opt->jobs
+      ? (jobs => $opt->jobs)
+      : (),
+  });
 }
 
 1;
@@ -34,13 +82,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command::test - test your dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -87,7 +137,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,59 @@
+use strict;
+use warnings;
+package Dist::Zilla::App::Command::version;
+# ABSTRACT: display dzil's version
+$Dist::Zilla::App::Command::version::VERSION = '5.019';
+use Dist::Zilla::App -command;
+use Moose;
+extends 'App::Cmd::Command::version';
+
+
+#pod =head1 SYNOPSIS
+#pod
+#pod Print dzil version
+#pod
+#pod   $ dzil --version or $dzil version
+#pod
+#pod =cut
+
+sub version_for_display {
+  my $version_pkg = $_[0]->version_package;
+  my $version = ( $version_pkg->VERSION ?
+                  $version_pkg->VERSION :
+                 'dev' );
+}
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::App::Command::version - display dzil's version
+
+=head1 VERSION
+
+version 5.019
+
+=head1 SYNOPSIS
+
+Print dzil version
+
+  $ dzil --version or $dzil version
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,18 +1,29 @@
 use strict;
 use warnings;
 package Dist::Zilla::App::Command;
-{
-  $Dist::Zilla::App::Command::VERSION = '4.300030';
-}
 # ABSTRACT: base class for dzil commands
+$Dist::Zilla::App::Command::VERSION = '5.019';
 use App::Cmd::Setup -command;
 use Moose::Autobox;
 
+#pod =method zilla
+#pod
+#pod This returns the Dist::Zilla object in use by the command.  If none has yet
+#pod been constructed, one will be by calling C<< Dist::Zilla->from_config >>.
+#pod
+#pod (This method just delegates to the Dist::Zilla::App object!)
+#pod
+#pod =cut
 
 sub zilla {
   return $_[0]->app->zilla;
 }
 
+#pod =method log
+#pod
+#pod This method calls the C<log> method of the application's chrome.
+#pod
+#pod =cut
 
 sub log {
   $_[0]->app->chrome->logger->log($_[1]);
@@ -24,13 +35,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Command - base class for dzil commands
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 METHODS
 
@@ -51,7 +64,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,9 @@
 use strict;
 package Dist::Zilla::App::Tester;
-{
-  $Dist::Zilla::App::Tester::VERSION = '4.300030';
-}
+# ABSTRACT: testing library for Dist::Zilla::App
+$Dist::Zilla::App::Tester::VERSION = '5.019';
 use parent 'App::Cmd::Tester::CaptureExternal';
 use App::Cmd::Tester 0.306 (); # result_class, ->app
-# ABSTRACT: testing library for Dist::Zilla::App
 
 use Dist::Zilla::App;
 use File::Copy::Recursive qw(dircopy);
@@ -45,10 +43,8 @@ sub test_dzil {
 
 {
   package Dist::Zilla::App::Tester::Result;
-{
-  $Dist::Zilla::App::Tester::Result::VERSION = '4.300030';
-}
-  BEGIN { our @ISA = qw(App::Cmd::Tester::Result); }
+$Dist::Zilla::App::Tester::Result::VERSION = '5.019';
+BEGIN { our @ISA = qw(App::Cmd::Tester::Result); }
 
   sub tempdir {
     my ($self) = @_;
@@ -88,13 +84,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App::Tester - testing library for Dist::Zilla::App
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -102,7 +100,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,8 @@
 use strict;
 use warnings;
 package Dist::Zilla::App;
-{
-  $Dist::Zilla::App::VERSION = '4.300030';
-}
 # ABSTRACT: Dist::Zilla's App::Cmd
+$Dist::Zilla::App::VERSION = '5.019';
 use App::Cmd::Setup 0.309 -app; # better compilation error detection
 
 use Carp ();
@@ -74,6 +72,12 @@ END_DIE
   return $stash_registry;
 }
 
+#pod =method zilla
+#pod
+#pod This returns the Dist::Zilla object in use by the command.  If none has yet
+#pod been constructed, one will be by calling C<< Dist::Zilla->from_config >>.
+#pod
+#pod =cut
 
 sub chrome {
   my ($self) = @_;
@@ -144,13 +148,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::App - Dist::Zilla's App::Cmd
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 METHODS
 
@@ -165,7 +171,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,14 @@
 package Dist::Zilla::Chrome::Term;
-{
-  $Dist::Zilla::Chrome::Term::VERSION = '4.300030';
-}
-use Moose;
 # ABSTRACT: chrome used for terminal-based interaction
+$Dist::Zilla::Chrome::Term::VERSION = '5.019';
+use Moose;
 
+#pod =head1 OVERVIEW
+#pod
+#pod This class provides a L<Dist::Zilla::Chrome> implementation for use in a
+#pod terminal environment.  It's the default chrome used by L<Dist::Zilla::App>.
+#pod
+#pod =cut
 
 use Dist::Zilla::Types qw(OneZero);
 use Log::Dispatchouli 1.102220;
@@ -16,16 +20,22 @@ has logger => (
   isa => 'Log::Dispatchouli',
   init_arg => undef,
   writer   => '_set_logger',
-  default  => sub {
-    Log::Dispatchouli->new({
+  lazy_build => 1,
+);
+
+sub _build_logger {
+  my $self = shift;
+  my $layer = sprintf(":encoding(%s)", $self->term_enc);
+  binmode( STDOUT, $layer );
+  binmode( STDERR, $layer );
+  return Log::Dispatchouli->new({
       ident     => 'Dist::Zilla',
       to_stdout => 1,
       log_pid   => 0,
       to_self   => ($ENV{DZIL_TESTING} ? 1 : 0),
       quiet_fatal => 'stdout',
-    });
-  }
-);
+  });
+}
 
 has term_ui => (
   is   => 'ro',
@@ -38,14 +48,15 @@ has term_ui => (
   },
 );
 
-sub decode_utf8 ($;$)
-{
-    require Encode;
-    no warnings 'redefine';
-    *decode_utf8 = \&Encode::decode_utf8;
-    goto \&decode_utf8;
-}
-
+has term_enc => (
+  is   => 'ro',
+  isa =>'Str',
+  lazy => 1,
+  default => sub {
+    require Term::Encoding;
+    return Term::Encoding::get_encoding() || die 'cannot determine encoding: no locale set?';
+  },
+);
 
 sub prompt_str {
   my ($self, $prompt, $arg) = @_;
@@ -53,14 +64,20 @@ sub prompt_str {
   my $default = $arg->{default};
   my $check   = $arg->{check};
 
+  require Encode;
+  my $term_enc = $self->term_enc;
+
   if ($arg->{noecho}) {
     require Term::ReadKey;
     Term::ReadKey::ReadMode('noecho');
   }
   my $input_bytes = $self->term_ui->get_reply(
-    prompt => $prompt,
+    prompt => Encode::encode($term_enc, $prompt, Encode::FB_CROAK()),
     allow  => $check || sub { defined $_[0] and length $_[0] },
-    (defined $default ? (default => $default) : ()),
+    (defined $default
+      ? (default => Encode::encode($term_enc, $default, Encode::FB_CROAK()))
+      : ()
+    ),
   );
   if ($arg->{noecho}) {
     Term::ReadKey::ReadMode('normal');
@@ -69,7 +86,7 @@ sub prompt_str {
     print "\n";
   }
 
-  my $input = decode_utf8( $input_bytes );
+  my $input = Encode::decode($term_enc, $input_bytes, Encode::FB_CROAK());
   chomp $input;
 
   return $input;
@@ -115,13 +132,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Chrome::Term - chrome used for terminal-based interaction
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 OVERVIEW
 
@@ -134,7 +153,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,7 @@
 package Dist::Zilla::Chrome::Test;
-{
-  $Dist::Zilla::Chrome::Test::VERSION = '4.300030';
-}
-use Moose;
 # ABSTRACT: the chrome used by Dist::Zilla::Tester
+$Dist::Zilla::Chrome::Test::VERSION = '5.019';
+use Moose;
 
 use MooseX::Types::Moose qw(ArrayRef HashRef Str);
 use Dist::Zilla::Types qw(OneZero);
@@ -20,6 +18,24 @@ has logger => (
   }
 );
 
+#pod =attr response_for
+#pod
+#pod The response_for attribute (which exists only in the Test chrome) is a
+#pod hashref that lets you specify the answer to questions asked by
+#pod C<prompt_str> or C<prompt_yn>.  The key is the prompt string.  If the
+#pod value is a string, it is returned every time that question is asked.
+#pod If the value is an arrayref, the first element is shifted off and
+#pod returned every time the question is asked.  If the arrayref is empty
+#pod (or the prompt is not listed in the hash), the default answer (if any)
+#pod is returned.
+#pod
+#pod Since you can't pass arguments to the Chrome constructor, response_for
+#pod is initialized to an empty hash, and you can add entries after
+#pod construction with the C<set_response_for> method:
+#pod
+#pod   $chrome->set_response_for($prompt => $response);
+#pod
+#pod =cut
 
 has response_for => (
   isa     => HashRef[ ArrayRef | Str ],
@@ -63,13 +79,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Chrome::Test - the chrome used by Dist::Zilla::Tester
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 ATTRIBUTES
 
@@ -96,7 +114,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Dist::Builder;
-{
-  $Dist::Zilla::Dist::Builder::VERSION = '4.300030';
-}
 # ABSTRACT: dist zilla subclass for building dists
+$Dist::Zilla::Dist::Builder::VERSION = '5.019';
 use Moose 0.92; # role composition fixes
 extends 'Dist::Zilla';
 
@@ -12,10 +10,27 @@ use MooseX::Types::Path::Class qw(Dir File);
 
 use File::pushd ();
 use Path::Class;
+use Path::Tiny; # because more Path::* is better, eh?
 use Try::Tiny;
 
 use namespace::autoclean;
 
+#pod =method from_config
+#pod
+#pod   my $zilla = Dist::Zilla->from_config(\%arg);
+#pod
+#pod This routine returns a new Zilla from the configuration in the current working
+#pod directory.
+#pod
+#pod This method should not be relied upon, yet.  Its semantics are B<certain> to
+#pod change.
+#pod
+#pod Valid arguments are:
+#pod
+#pod   config_class - the class to use to read the config
+#pod                  default: Dist::Zilla::MVP::Reader::Finder
+#pod
+#pod =cut
 
 sub from_config {
   my ($class, $arg) = @_;
@@ -110,18 +125,19 @@ sub _setup_default_plugins {
       zilla       => $self,
       style       => 'list',
       code        => sub {
+        my $self = shift;
         my $map = $self->zilla->_share_dir_map;
         my @files;
         if ( $map->{dist} ) {
           push @files, $self->zilla->files->grep(sub {
-            local $_ = $_->name; m{\A\Q$map->{dist}\E/}
-          });
+            $_->name =~ m{\A\Q$map->{dist}\E/}
+          })->flatten;
         }
         if ( my $mod_map = $map->{module} ) {
           for my $mod ( keys %$mod_map ) {
             push @files, $self->zilla->files->grep(sub {
-              local $_ = $_->name; m{\A\Q$mod_map->{$mod}\E/}
-            });
+              $_->name =~ m{\A\Q$mod_map->{$mod}\E/}
+            })->flatten;
           }
         }
         return \@files;
@@ -147,6 +163,30 @@ sub _setup_default_plugins {
 
     $self->plugins->push($plugin);
   }
+
+  unless ($self->plugin_named(':AllFiles')) {
+    require Dist::Zilla::Plugin::FinderCode;
+    my $plugin = Dist::Zilla::Plugin::FinderCode->new({
+      plugin_name => ':AllFiles',
+      zilla       => $self,
+      style       => 'grep',
+      code        => sub { return 1 },
+    });
+
+    $self->plugins->push($plugin);
+  }
+
+  unless ($self->plugin_named(':NoFiles')) {
+    require Dist::Zilla::Plugin::FinderCode;
+    my $plugin = Dist::Zilla::Plugin::FinderCode->new({
+      plugin_name => ':NoFiles',
+      zilla       => $self,
+      style       => 'list',
+      code        => sub { return },
+    });
+
+    $self->plugins->push($plugin);
+  }
 }
 
 has _share_dir_map => (
@@ -191,7 +231,7 @@ sub _load_config {
   my $config_class =
     $arg->{config_class} ||= 'Dist::Zilla::MVP::Reader::Finder';
 
-  Class::MOP::load_class($config_class);
+  Class::Load::load_class($config_class);
 
   $arg->{chrome}->logger->log_debug(
     { prefix => '[DZ] ' },
@@ -231,13 +271,14 @@ sub _load_config {
 
     my $package = $_->package;
 
+    my $bundle = $package =~ /^@/ ? ' bundle' : '';
     die <<"END_DIE";
-Required plugin $package isn't installed.
+Required plugin$bundle $package isn't installed.
 
 Run 'dzil authordeps' to see a list of all required plugins.
 You can pipe the list to your CPAN client to install or update them:
 
-    dzil authordeps | cpanm
+    dzil authordeps --missing | cpanm
 
 END_DIE
 
@@ -246,6 +287,21 @@ END_DIE
   return $seq;
 }
 
+#pod =method build_in
+#pod
+#pod   $zilla->build_in($root);
+#pod
+#pod This method builds the distribution in the given directory.  If no directory
+#pod name is given, it defaults to DistName-Version.  If the distribution has
+#pod already been built, an exception will be thrown.
+#pod
+#pod =method build
+#pod
+#pod This method just calls C<build_in> with no arguments.  It gets you the default
+#pod behavior without the weird-looking formulation of C<build_in> with no object
+#pod for the preposition!
+#pod
+#pod =cut
 
 sub build { $_[0]->build_in }
 
@@ -262,11 +318,15 @@ sub build_in {
 
   $self->log("beginning to build " . $self->name);
 
-  $_->gather_files     for $self->plugins_with(-FileGatherer)->flatten;
-  $_->prune_files      for $self->plugins_with(-FilePruner)->flatten;
-  $_->munge_files      for $self->plugins_with(-FileMunger)->flatten;
+  $_->gather_files       for $self->plugins_with(-FileGatherer)->flatten;
+  $_->set_file_encodings for $self->plugins_with(-EncodingProvider)->flatten;
+  $_->prune_files        for $self->plugins_with(-FilePruner)->flatten;
+
+  $self->version; # instantiate this lazy attribute now that files are gathered
+
+  $_->munge_files        for $self->plugins_with(-FileMunger)->flatten;
 
-  $_->register_prereqs for $self->plugins_with(-PrereqSource)->flatten;
+  $_->register_prereqs   for $self->plugins_with(-PrereqSource)->flatten;
 
   $self->prereqs->finalize;
 
@@ -291,6 +351,11 @@ sub build_in {
   $self->built_in($build_root);
 }
 
+#pod =attr built_in
+#pod
+#pod This is the L<Path::Class::Dir>, if any, in which the dist has been built.
+#pod
+#pod =cut
 
 has built_in => (
   is   => 'rw',
@@ -298,6 +363,20 @@ has built_in => (
   init_arg  => undef,
 );
 
+#pod =method ensure_built_in
+#pod
+#pod   $zilla->ensure_built_in($root);
+#pod
+#pod This method behaves like C<L</build_in>>, but if the dist is already built in
+#pod C<$root> (or the default root, if no root is given), no exception is raised.
+#pod
+#pod =method ensure_built
+#pod
+#pod This method just calls C<ensure_built_in> with no arguments.  It gets you the
+#pod default behavior without the weird-looking formulation of C<ensure_built_in>
+#pod with no object for the preposition!
+#pod
+#pod =cut
 
 sub ensure_built {
   $_[0]->ensure_built_in;
@@ -314,6 +393,15 @@ sub ensure_built_in {
   $self->build_in($root);
 }
 
+#pod =method dist_basename
+#pod
+#pod   my $basename = $zilla->dist_basename;
+#pod
+#pod This method will return the dist's basename (e.g. C<Dist-Name-1.01>.
+#pod The basename is used as the top-level directory in the tarball.  It
+#pod does not include C<-TRIAL>, even if building a trial dist.
+#pod
+#pod =cut
 
 sub dist_basename {
   my ($self) = @_;
@@ -324,6 +412,15 @@ sub dist_basename {
   );
 }
 
+#pod =method archive_filename
+#pod
+#pod   my $tarball = $zilla->archive_filename;
+#pod
+#pod This method will return the filename (e.g. C<Dist-Name-1.01.tar.gz>)
+#pod of the tarball of this dist.  It will include C<-TRIAL> if building a
+#pod trial dist.  The tarball might not exist.
+#pod
+#pod =cut
 
 sub archive_filename {
   my ($self) = @_;
@@ -334,6 +431,14 @@ sub archive_filename {
   );
 }
 
+#pod =method build_archive
+#pod
+#pod   $zilla->build_archive;
+#pod
+#pod This method will ensure that the dist has been built, and will then build a
+#pod tarball of the build directory in the current directory.
+#pod
+#pod =cut
 
 sub build_archive {
   my ($self) = @_;
@@ -345,7 +450,8 @@ sub build_archive {
 
   $_->before_archive for $self->plugins_with(-BeforeArchive)->flatten;
 
-  my $method = Class::Load::load_optional_class('Archive::Tar::Wrapper')
+  my $method = Class::Load::load_optional_class('Archive::Tar::Wrapper',
+                                                { -version => 0.15 })
              ? '_build_archive_with_wrapper'
              : '_build_archive';
 
@@ -362,7 +468,7 @@ sub build_archive {
 sub _build_archive {
   my ($self, $built_in, $basename, $basedir) = @_;
 
-  $self->log("building archive with Archive::Tar; install Archive::Tar::Wrapper for improved speed");
+  $self->log("building archive with Archive::Tar; install Archive::Tar::Wrapper 0.15 or newer for improved speed");
 
   require Archive::Tar;
   my $archive = Archive::Tar->new;
@@ -381,15 +487,9 @@ sub _build_archive {
     }
 
     my $filename = $built_in->file( $distfile->name );
-    my $content = do {
-      use autodie;
-      local $/;
-      open my $fh, '<', $filename;
-      <$fh>;
-    };
     $archive->add_data(
       $basedir->file( $distfile->name ),
-      $content,
+      path($filename)->slurp_raw,
       { mode => (stat $filename)[2] & ~022 },
     );
   }
@@ -434,6 +534,15 @@ sub _prep_build_root {
   return $build_root;
 }
 
+#pod =method release
+#pod
+#pod   $zilla->release;
+#pod
+#pod This method releases the distribution, probably by uploading it to the CPAN.
+#pod The actual effects of this method (as with most of the methods) is determined
+#pod by the loaded plugins.
+#pod
+#pod =cut
 
 sub release {
   my $self = shift;
@@ -455,6 +564,14 @@ sub release {
   $_->after_release($tgz) for $self->plugins_with(-AfterRelease)->flatten;
 }
 
+#pod =method clean
+#pod
+#pod This method removes temporary files and directories suspected to have been
+#pod produced by the Dist::Zilla build process.  Specifically, it deletes the
+#pod F<.build> directory and any entity that starts with the dist name and a hyphen,
+#pod like matching the glob C<Your-Dist-*>.
+#pod
+#pod =cut
 
 sub clean {
   my ($self, $dry_run) = @_;
@@ -470,6 +587,14 @@ sub clean {
   };
 }
 
+#pod =method ensure_built_in_tmpdir
+#pod
+#pod   $zilla->ensure_built_in_tmpdir;
+#pod
+#pod This method will consistently build the distribution in a temporary
+#pod subdirectory. It will return the path for the temporary build location.
+#pod
+#pod =cut
 
 sub ensure_built_in_tmpdir {
   my $self = shift;
@@ -497,7 +622,7 @@ sub ensure_built_in_tmpdir {
       rename $latest, $previous
         or $self->log("cannot move .build/latest link to .build/previous");
     }
-    symlink $target, $latest
+    symlink $target->basename, $latest
       or $self->log('cannot create link .build/latest');
   }
 
@@ -506,6 +631,24 @@ sub ensure_built_in_tmpdir {
   return ($target, $latest, $previous);
 }
 
+#pod =method install
+#pod
+#pod   $zilla->install( \%arg );
+#pod
+#pod This method installs the distribution locally.  The distribution will be built
+#pod in a temporary subdirectory, then the process will change directory to that
+#pod subdir and an installer will be run.
+#pod
+#pod Valid arguments are:
+#pod
+#pod   keep_build_dir  - if true, don't rmtree the build dir, even if everything
+#pod                     seemed to work
+#pod   install_command - the command to run in the subdir to install the dist
+#pod                     default (roughly): $^X -MCPAN -einstall .
+#pod
+#pod                     this argument should be an arrayref
+#pod
+#pod =cut
 
 sub install {
   my ($self, $arg) = @_;
@@ -513,21 +656,26 @@ sub install {
 
   my ($target, $latest) = $self->ensure_built_in_tmpdir;
 
-  eval {
+  my $ok = eval {
     ## no critic Punctuation
     my $wd = File::pushd::pushd($target);
     my @cmd = $arg->{install_command}
             ? @{ $arg->{install_command} }
-            : ($^X => '-MCPAN' =>
-                $^O eq 'MSWin32' ? q{-e"install '.'"} : '-einstall "."');
+            : (cpanm => ".");
 
     $self->log_debug([ 'installing via %s', \@cmd ]);
     system(@cmd) && $self->log_fatal([ "error running %s", \@cmd ]);
+    1;
   };
 
-  if ($@) {
-    $self->log($@);
-    $self->log("left failed dist in place at $target");
+  unless ($ok) {
+    my $error = $@ || '(exception clobered)';
+    $self->log("install failed, left failed dist in place at $target");
+    die $error;
+  }
+
+  if ($arg->{keep_build_dir}) {
+    $self->log("all's well; left dist in place at $target");
   } else {
     $self->log("all's well; removing $target");
     $target->rmtree;
@@ -537,37 +685,77 @@ sub install {
   return;
 }
 
+#pod =method test
+#pod
+#pod   $zilla->test(\%arg);
+#pod
+#pod This method builds a new copy of the distribution and tests it using
+#pod C<L</run_tests_in>>.
+#pod
+#pod C<\%arg> may be omitted.  Otherwise, valid arguments are:
+#pod
+#pod   keep_build_dir  - if true, don't rmtree the build dir, even if everything
+#pod                     seemed to work
+#pod
+#pod =cut
 
 sub test {
-  my ($self) = @_;
+  my ($self, $arg) = @_;
 
   Carp::croak("you can't test without any TestRunner plugins")
     unless my @testers = $self->plugins_with(-TestRunner)->flatten;
 
   my ($target, $latest) = $self->ensure_built_in_tmpdir;
-  my $error  = $self->run_tests_in($target);
+  my $error  = $self->run_tests_in($target, $arg);
+
+  if ($arg and $arg->{keep_build_dir}) {
+    $self->log("all's well; left dist in place at $target");
+    return;
+  }
 
   $self->log("all's well; removing $target");
   $target->rmtree;
   $latest->remove if $latest;
 }
 
+#pod =method run_tests_in
+#pod
+#pod   my $error = $zilla->run_tests_in($directory, $arg);
+#pod
+#pod This method runs the tests in $directory (a Path::Class::Dir), which
+#pod must contain an already-built copy of the distribution.  It will throw an
+#pod exception if there are test failures.
+#pod
+#pod It does I<not> set any of the C<*_TESTING> environment variables, nor
+#pod does it clean up C<$directory> afterwards.
+#pod
+#pod =cut
 
 sub run_tests_in {
-  my ($self, $target) = @_;
+  my ($self, $target, $arg) = @_;
 
   Carp::croak("you can't test without any TestRunner plugins")
     unless my @testers = $self->plugins_with(-TestRunner)->flatten;
 
   for my $tester (@testers) {
     my $wd = File::pushd::pushd($target);
-    $tester->test( $target );
+    $tester->test( $target, $arg );
   }
 }
 
+#pod =method run_in_build
+#pod
+#pod   $zilla->run_in_build( \@cmd );
+#pod
+#pod This method makes a temporary directory, builds the distribution there,
+#pod executes the dist's first L<BuildRunner|Dist::Zilla::Role::BuildRunner>, and
+#pod then runs the given command in the build directory.  If the command exits
+#pod non-zero, the directory will be left in place.
+#pod
+#pod =cut
 
 sub run_in_build {
-  my ($self, $cmd) = @_;
+  my ($self, $cmd, $arg) = @_;
 
   # The sort below is a cheap hack to get ModuleBuild ahead of
   # ExtUtils::MakeMaker. -- rjbs, 2010-01-05
@@ -583,6 +771,12 @@ sub run_in_build {
   # building the dist for real
   my $ok = eval {
     my $wd = File::pushd::pushd($target);
+
+    if ($arg and exists $arg->{build} and ! $arg->{build}) {
+      system(@$cmd) and die "error while running: @$cmd";
+      return 1;
+    }
+
     $builders[0]->build;
 
     local $ENV{PERL5LIB} = join $Config::Config{path_sep},
@@ -615,13 +809,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Dist::Builder - dist zilla subclass for building dists
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 ATTRIBUTES
 
@@ -728,6 +924,8 @@ subdir and an installer will be run.
 
 Valid arguments are:
 
+  keep_build_dir  - if true, don't rmtree the build dir, even if everything
+                    seemed to work
   install_command - the command to run in the subdir to install the dist
                     default (roughly): $^X -MCPAN -einstall .
 
@@ -735,14 +933,19 @@ Valid arguments are:
 
 =head2 test
 
-  $zilla->test;
+  $zilla->test(\%arg);
 
 This method builds a new copy of the distribution and tests it using
 C<L</run_tests_in>>.
 
+C<\%arg> may be omitted.  Otherwise, valid arguments are:
+
+  keep_build_dir  - if true, don't rmtree the build dir, even if everything
+                    seemed to work
+
 =head2 run_tests_in
 
-  my $error = $zilla->run_tests_in($directory);
+  my $error = $zilla->run_tests_in($directory, $arg);
 
 This method runs the tests in $directory (a Path::Class::Dir), which
 must contain an already-built copy of the distribution.  It will throw an
@@ -766,7 +969,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Dist::Minter;
-{
-  $Dist::Zilla::Dist::Minter::VERSION = '4.300030';
-}
 # ABSTRACT: distribution builder; installer not included!
+$Dist::Zilla::Dist::Minter::VERSION = '5.019';
 use Moose 0.92; # role composition fixes
 extends 'Dist::Zilla';
 
@@ -32,7 +30,7 @@ sub _new_from_profile {
 
   my $config_class =
     $arg->{config_class} ||= 'Dist::Zilla::MVP::Reader::Finder';
-  Class::MOP::load_class($config_class);
+  Class::Load::load_class($config_class);
 
   $arg->{chrome}->logger->log_debug(
     { prefix => '[DZ] ' },
@@ -58,7 +56,7 @@ sub _new_from_profile {
     { '' => 'Dist::Zilla::MintingProfile::', '=', => '' },
     $profile_data->[0],
   );
-  Class::MOP::load_class($module);
+  Class::Load::load_class($module);
 
   my $profile_dir = $module->profile_dir($profile_data->[1]);
 
@@ -116,9 +114,10 @@ sub mint_dist {
     $minter->make_module({ name => $module->{name} })
   }
 
-  $_->gather_files for $self->plugins_with(-FileGatherer)->flatten;
-  $_->prune_files  for $self->plugins_with(-FilePruner)->flatten;
-  $_->munge_files  for $self->plugins_with(-FileMunger)->flatten;
+  $_->gather_files       for $self->plugins_with(-FileGatherer)->flatten;
+  $_->set_file_encodings for $self->plugins_with(-EncodingProvider)->flatten;
+  $_->prune_files        for $self->plugins_with(-FilePruner)->flatten;
+  $_->munge_files        for $self->plugins_with(-FileMunger)->flatten;
 
   $self->_check_dupe_files;
 
@@ -141,13 +140,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Dist::Minter - distribution builder; installer not included!
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -155,7 +156,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,24 @@
 package Dist::Zilla::File::FromCode;
-{
-  $Dist::Zilla::File::FromCode::VERSION = '4.300030';
-}
 # ABSTRACT: a file whose content is (re-)built on demand
+$Dist::Zilla::File::FromCode::VERSION = '5.019';
 use Moose;
+use Moose::Util::TypeConstraints;
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This represents a file whose contents will be generated on demand from a
+#pod callback or method name.
+#pod
+#pod It has one attribute, C<code>, which may be a method name (string) or a
+#pod coderef.  When the file's C<content> method is called, the code is used to
+#pod generate the content.  This content is I<not> cached.  It is recomputed every
+#pod time the content is requested.
+#pod
+#pod =cut
+
+with 'Dist::Zilla::Role::File';
 
 has code => (
   is  => 'rw',
@@ -14,16 +26,81 @@ has code => (
   required => 1,
 );
 
+#pod =attr code_return_type
+#pod
+#pod 'text' or 'bytes'
+#pod
+#pod =cut
+
+has code_return_type => (
+  is => 'ro',
+  isa => enum([ qw(text bytes) ]),
+  default => 'text',
+);
+
+#pod =attr encoding
+#pod
+#pod =cut
+
+sub encoding;
+
+has encoding => (
+  is => 'ro',
+  isa => 'Str',
+  lazy => 1,
+  builder => "_build_encoding",
+);
+
+sub _build_encoding {
+  my ($self) = @_;
+  return $self->code_return_type eq 'text' ? 'UTF-8' : 'bytes';
+}
+
+#pod =attr content
+#pod
+#pod =cut
+
 sub content {
   my ($self) = @_;
 
-  confess "cannot set content of a FromCode file" if @_ > 1;
+  confess("cannot set content of a FromCode file") if @_ > 1;
 
   my $code = $self->code;
-  return $self->$code;
+  my $result = $self->$code;
+
+  if ( $self->code_return_type eq 'text' ) {
+    return $result;
+  }
+  else {
+    $self->_decode($result);
+  }
 }
 
-with 'Dist::Zilla::Role::File';
+#pod =attr encoded_content
+#pod
+#pod =cut
+
+sub encoded_content {
+  my ($self) = @_;
+
+  confess( "cannot set encoded_content of a FromCode file" ) if @_ > 1;
+
+  my $code = $self->code;
+  my $result = $self->$code;
+
+  if ( $self->code_return_type eq 'bytes' ) {
+    return $result;
+  }
+  else {
+    $self->_encode($result);
+  }
+}
+
+around 'added_by' => sub {
+  my ($orig, $self) = @_;
+  return sprintf("%s from coderef set by %s", $self->code_return_type, $self->$orig);
+};
+
 __PACKAGE__->meta->make_immutable;
 1;
 
@@ -31,13 +108,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::File::FromCode - a file whose content is (re-)built on demand
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -49,13 +128,25 @@ coderef.  When the file's C<content> method is called, the code is used to
 generate the content.  This content is I<not> cached.  It is recomputed every
 time the content is requested.
 
+=head1 ATTRIBUTES
+
+=head2 code_return_type
+
+'text' or 'bytes'
+
+=head2 encoding
+
+=head2 content
+
+=head2 encoded_content
+
 =head1 AUTHOR
 
 Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,20 +1,41 @@
 package Dist::Zilla::File::InMemory;
-{
-  $Dist::Zilla::File::InMemory::VERSION = '4.300030';
-}
 # ABSTRACT: a file that you build entirely in memory
+$Dist::Zilla::File::InMemory::VERSION = '5.019';
 use Moose;
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This represents a file created in memory -- it's not much more than a glorified
+#pod string.
+#pod
+#pod See L<Dist::Zilla::Role::MutableFile> for details.
+#pod
+#pod =cut
+
+with 'Dist::Zilla::Role::MutableFile', 'Dist::Zilla::Role::StubBuild';
+
+after 'BUILD' => sub {
+  my ($self,$opts) = @_;
+  my @sources = qw/encoded_content content/;
+  my @given = grep { exists $opts->{$_} } @sources;
+  unless ( @given == 1 ) {
+    $self->log_fatal(__PACKAGE__ . " requires have one and only one of: @sources");
+  }
+  my $source = $given[0];
+  my $setter = "_$source";
+  $self->_content_source($source);
+  $self->$setter( $opts->{$source} );
+};
+
+# these should never be called since we ensure one of _content or
+# _encoded_content content is set in BUILD and set the source accordingly
+
+sub _build_content { die "shouldn't reach here" }
+sub _build_encoded_content { die "shouldn't reach here" }
+sub _build_content_source { die "shouldn't reach here" }
 
-has content => (
-  is  => 'rw',
-  isa => 'Str',
-  required => 1,
-);
-
-with 'Dist::Zilla::Role::File';
 __PACKAGE__->meta->make_immutable;
 1;
 
@@ -22,19 +43,22 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::File::InMemory - a file that you build entirely in memory
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
 This represents a file created in memory -- it's not much more than a glorified
-string.  It has a read/write C<content> attribute that holds the octets that
-will be written to disk.
+string.
+
+See L<Dist::Zilla::Role::MutableFile> for details.
 
 =head1 AUTHOR
 
@@ -42,7 +66,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,46 +1,44 @@
 package Dist::Zilla::File::OnDisk;
-{
-  $Dist::Zilla::File::OnDisk::VERSION = '4.300030';
-}
 # ABSTRACT: a file that comes from your filesystem
+$Dist::Zilla::File::OnDisk::VERSION = '5.019';
 use Moose;
 
+use Path::Tiny;
+
 use namespace::autoclean;
 
+with 'Dist::Zilla::Role::MutableFile', 'Dist::Zilla::Role::StubBuild';
 
-has content => (
-  is  => 'rw',
-  isa => 'Str',
-  lazy => 1,
-  default => sub { shift->_read_file },
-);
+#pod =head1 DESCRIPTION
+#pod
+#pod This represents a file stored on disk.  Its C<content> attribute is read from
+#pod the originally given file name when first read, but is then kept in memory and
+#pod may be altered by plugins.
+#pod
+#pod =cut
 
 has _original_name => (
   is  => 'ro',
+  writer => '_set_original_name',
   isa => 'Str',
   init_arg => undef,
 );
 
-sub BUILD {
+after 'BUILD' => sub {
   my ($self) = @_;
-  $self->{_original_name} = $self->name;
-}
+  $self->_set_original_name( $self->name );
+};
 
-sub _read_file {
+sub _build_encoded_content {
   my ($self) = @_;
-
-  my $fname = $self->_original_name;
-  open my $fh, '<', $fname or die "can't open $fname for reading: $!";
-
-  # This is needed or \r\n is filtered to be just \n on win32.
-  # Maybe :raw:utf8, not sure.
-  #     -- Kentnl - 2010-06-10
-  binmode $fh, ':raw';
-
-  my $content = do { local $/; <$fh> };
+  return path($self->_original_name)->slurp_raw;
 }
 
-with 'Dist::Zilla::Role::File';
+sub _build_content_source { return "encoded_content" }
+
+# should never be called, as content will always be generated from
+# encoded content
+sub _build_content { die "shouldn't reach here" }
 
 __PACKAGE__->meta->make_immutable;
 1;
@@ -49,13 +47,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::File::OnDisk - a file that comes from your filesystem
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -69,7 +69,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,22 @@
 package Dist::Zilla::MVP::Assembler::GlobalConfig;
-{
-  $Dist::Zilla::MVP::Assembler::GlobalConfig::VERSION = '4.300030';
-}
+# ABSTRACT: Dist::Zilla::MVP::Assembler for global configuration
+$Dist::Zilla::MVP::Assembler::GlobalConfig::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::MVP::Assembler';
-# ABSTRACT: Dist::Zilla::MVP::Assembler for global configuration
 
 use namespace::autoclean;
 
+#pod =head1 OVERVIEW
+#pod
+#pod This is a subclass of L<Dist::Zilla::MVP::Assembler> used when assembling the
+#pod global configuration.  It has a C<stash_registry> attribute, a hashref, into
+#pod which stashes will be registered.
+#pod
+#pod They get registered via the C<register_stash> method, below, generally called
+#pod by the C<register_component> method on L<Dist::Zilla::Role::Stash>-performing
+#pod class.
+#pod
+#pod =cut
 
 has stash_registry => (
   is  => 'ro',
@@ -15,6 +24,14 @@ has stash_registry => (
   default => sub { {} },
 );
 
+#pod =method register_stash
+#pod
+#pod   $assembler->register_stash($name => $stash_object);
+#pod
+#pod This adds a stash to the assembler's stash registry -- unless the name is
+#pod already taken, in which case an exception is raised.
+#pod
+#pod =cut
 
 sub register_stash {
   my ($self, $name, $object) = @_;
@@ -34,13 +51,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::MVP::Assembler::GlobalConfig - Dist::Zilla::MVP::Assembler for global configuration
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 OVERVIEW
 
@@ -67,7 +86,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,24 @@
 package Dist::Zilla::MVP::Assembler::Zilla;
-{
-  $Dist::Zilla::MVP::Assembler::Zilla::VERSION = '4.300030';
-}
+# ABSTRACT: Dist::Zilla::MVP::Assembler for the Dist::Zilla object
+$Dist::Zilla::MVP::Assembler::Zilla::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::MVP::Assembler';
-# ABSTRACT: Dist::Zilla::MVP::Assembler for the Dist::Zilla object
 
 use namespace::autoclean;
 
+#pod =head1 OVERVIEW
+#pod
+#pod This is a subclass of L<Dist::Zilla::MVP::Assembler> used when assembling the
+#pod Dist::Zilla object.
+#pod
+#pod It has a C<zilla_class> attribute, which is used to determine what class of
+#pod Dist::Zilla object to create.  (This isn't very useful now, but will be in the
+#pod future when minting and building use different subclasses of Dist::Zilla.)
+#pod
+#pod Upon construction, the assembler will create a L<Dist::Zilla::MVP::RootSection>
+#pod as the initial section.
+#pod
+#pod =cut
 
 use MooseX::Types::Perl qw(PackageName);
 use Dist::Zilla::MVP::RootSection;
@@ -25,12 +36,27 @@ has zilla_class => (
   required => 1
 );
 
+#pod =method zilla
+#pod
+#pod This method is a shortcut for retrieving the C<zilla> from the root section.
+#pod If called before that section has been finalized, it will result in an
+#pod exception.
+#pod
+#pod =cut
 
 sub zilla {
   my ($self) = @_;
   $self->sequence->section_named('_')->zilla;
 }
 
+#pod =method register_stash
+#pod
+#pod   $assembler->register_stash($name => $stash_object);
+#pod
+#pod This adds a stash to the assembler's zilla's stash registry -- unless the name
+#pod is already taken, in which case an exception is raised.
+#pod
+#pod =cut
 
 sub register_stash {
   my ($self, $name, $object) = @_;
@@ -48,13 +74,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::MVP::Assembler::Zilla - Dist::Zilla::MVP::Assembler for the Dist::Zilla object
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 OVERVIEW
 
@@ -89,7 +117,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,16 +1,35 @@
 package Dist::Zilla::MVP::Assembler;
-{
-  $Dist::Zilla::MVP::Assembler::VERSION = '4.300030';
-}
+# ABSTRACT: Dist::Zilla-specific subclass of Config::MVP::Assembler
+$Dist::Zilla::MVP::Assembler::VERSION = '5.019';
 use Moose;
 extends 'Config::MVP::Assembler';
 with 'Config::MVP::Assembler::WithBundles';
-# ABSTRACT: Dist::Zilla-specific subclass of Config::MVP::Assembler
 
 use namespace::autoclean;
 
 use Dist::Zilla::Util;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod B<Take this next bit seriously!>  If you don't understand how L<Config::MVP>
+#pod works, reading about how the Dist::Zilla-specific Assembler works is not going
+#pod to be useful.
+#pod
+#pod Dist::Zilla::MVP::Assembler extends L<Config::MVP::Assembler> and composes
+#pod L<Config::MVP::Assembler::WithBundles>.  For potential plugin bundles (things
+#pod composing L<Dist::Zilla::Role::PluginBundle>)
+#pod
+#pod The Assembler has chrome, so it can log and will (eventually) be able to get
+#pod input from the user.
+#pod
+#pod The Assembler's C<expand_package> method delegates to Dist::Zilla::Util's
+#pod L<expand_config_package_name|Dist::Zilla::Util/expand_config_package_name>
+#pod method.
+#pod
+#pod The Assembler will throw an exception if it is instructed to add a value for
+#pod C<plugin_name> or C<zilla>.
+#pod
+#pod =cut
 
 has chrome => (
   is   => 'rw',
@@ -57,13 +76,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::MVP::Assembler - Dist::Zilla-specific subclass of Config::MVP::Assembler
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -91,7 +112,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,9 @@
 package Dist::Zilla::MVP::Reader::Finder;
-{
-  $Dist::Zilla::MVP::Reader::Finder::VERSION = '4.300030';
-}
+# ABSTRACT: the reader for dist.ini files
+$Dist::Zilla::MVP::Reader::Finder::VERSION = '5.019';
 use Moose;
 use Config::MVP::Reader 2.101540; # if_none
 extends 'Config::MVP::Reader::Finder';
-# ABSTRACT: the reader for dist.ini files
 
 use namespace::autoclean;
 
@@ -22,13 +20,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::MVP::Reader::Finder - the reader for dist.ini files
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -36,7 +36,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,17 @@
 package Dist::Zilla::MVP::Reader::Perl;
-{
-  $Dist::Zilla::MVP::Reader::Perl::VERSION = '4.300030';
-}
+# ABSTRACT: the reader for dist.pl files
+$Dist::Zilla::MVP::Reader::Perl::VERSION = '5.019';
 use Moose;
 extends 'Config::MVP::Reader';
 with qw(Config::MVP::Reader::Findable::ByExtension);
-# ABSTRACT: the reader for dist.pl files
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Dist::Zilla::Config reads in the F<dist.pl> file for a distribution.
+#pod
+#pod =cut
 
 sub default_extension { 'pl' }
 
@@ -52,13 +55,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::MVP::Reader::Perl - the reader for dist.pl files
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -70,7 +75,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,26 @@
 package Dist::Zilla::MVP::RootSection;
-{
-  $Dist::Zilla::MVP::RootSection::VERSION = '4.300030';
-}
+# ABSTRACT: a standard section in Dist::Zilla's configuration sequence
+$Dist::Zilla::MVP::RootSection::VERSION = '5.019';
 use Moose;
 extends 'Config::MVP::Section';
-# ABSTRACT: a standard section in Dist::Zilla's configuration sequence
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a subclass of L<Config::MVP::Section>, used as the starting section by
+#pod L<Dist::Zilla::MVP::Assembler::Zilla>.  It has a number of useful defaults, as
+#pod well as a C<zilla> attribute which will, after section finalization, contain a
+#pod Dist::Zilla object with which subsequent plugin sections may register.
+#pod
+#pod Those useful defaults are:
+#pod
+#pod =for :list
+#pod * name defaults to _
+#pod * aliases defaults to { author => 'authors' }
+#pod * multivalue_args defaults to [ 'authors' ]
+#pod
+#pod =cut
 
 use MooseX::LazyRequire;
 use MooseX::SetOnce;
@@ -56,13 +69,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::MVP::RootSection - a standard section in Dist::Zilla's configuration sequence
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -95,7 +110,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,8 @@
 package Dist::Zilla::MVP::Section;
-{
-  $Dist::Zilla::MVP::Section::VERSION = '4.300030';
-}
+# ABSTRACT: a standard section in Dist::Zilla's configuration sequence
+$Dist::Zilla::MVP::Section::VERSION = '5.019';
 use Moose;
 extends 'Config::MVP::Section';
-# ABSTRACT: a standard section in Dist::Zilla's configuration sequence
 
 use namespace::autoclean;
 
@@ -45,13 +43,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::MVP::Section - a standard section in Dist::Zilla's configuration sequence
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -59,7 +59,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::MintingProfile::Default;
-{
-  $Dist::Zilla::MintingProfile::Default::VERSION = '4.300030';
-}
 # ABSTRACT: Default minting profile provider
+$Dist::Zilla::MintingProfile::Default::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::MintingProfile::ShareDir';
 
@@ -11,6 +9,14 @@ use namespace::autoclean;
 use Dist::Zilla::Util;
 use Path::Class;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Default minting profile provider.
+#pod
+#pod This provider looks first in the F<~/.dzil/profiles/$profile_name> directory,
+#pod if not found it looks among the default profiles shipped with Dist::Zilla.
+#pod
+#pod =cut
 
 around profile_dir => sub {
   my ($orig, $self, $profile_name) = @_;
@@ -35,13 +41,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::MintingProfile::Default - Default minting profile provider
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -56,7 +64,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,8 @@
 package Dist::Zilla::Plugin::AutoPrereq;
-{
-  $Dist::Zilla::Plugin::AutoPrereq::VERSION = '4.300030';
-}
+# ABSTRACT: (DEPRECATED) the old name for Dist::Zilla::Plugin::AutoPrereqs
+$Dist::Zilla::Plugin::AutoPrereq::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::Plugin::AutoPrereqs';
-# ABSTRACT: (DEPRECATED) the old name for Dist::Zilla::Plugin::AutoPrereqs
 
 use namespace::autoclean;
 
@@ -18,17 +16,25 @@ before register_component => sub {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod L<AutoPrereqs|Dist::Zilla::Plugin::AutoPrereqs>
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::AutoPrereq - (DEPRECATED) the old name for Dist::Zilla::Plugin::AutoPrereqs
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SEE ALSO
 
@@ -40,7 +46,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,10 @@
 package Dist::Zilla::Plugin::AutoPrereqs;
-{
-  $Dist::Zilla::Plugin::AutoPrereqs::VERSION = '4.300030';
-}
+# ABSTRACT: automatically extract prereqs from your modules
+$Dist::Zilla::Plugin::AutoPrereqs::VERSION = '5.019';
 use Moose;
 with(
   'Dist::Zilla::Role::PrereqSource',
+  'Dist::Zilla::Role::PPI',
   'Dist::Zilla::Role::FileFinderUser' => {
     default_finders => [ ':InstallModules', ':ExecFiles' ],
   },
@@ -20,18 +20,79 @@ with(
   },
 );
 
+#pod =attr finder
+#pod
+#pod This is the name of a L<FileFinder|Dist::Zilla::Role::FileFinder>
+#pod whose files will be scanned to determine runtime prerequisites.  It
+#pod may be specified multiple times.  The default value is
+#pod C<:InstallModules> and C<:ExecFiles>.
+#pod
+#pod =attr test_finder
+#pod
+#pod Just like C<finder>, but for test-phase prerequisites.  The default
+#pod value is C<:TestFiles>.
+#pod
+#pod =attr configure_finder
+#pod
+#pod Just like C<finder>, but for configure-phase prerequisites.  There is
+#pod no default value; AutoPrereqs will not determine configure-phase
+#pod prerequisites unless you set configure_finder.
+#pod
+#pod =cut
 
 use namespace::autoclean;
 
-# ABSTRACT: automatically extract prereqs from your modules
-
 use List::AllUtils 'uniq';
 use Moose::Autobox;
-use Perl::PrereqScanner 1.005; # do not prune common libs
-use PPI;
+use Perl::PrereqScanner 1.016; # don't skip "lib"
 use CPAN::Meta::Requirements;
 use version;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [AutoPrereqs]
+#pod   skip = ^Foo|Bar$
+#pod   skip = ^Other::Dist
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will extract loosely your distribution prerequisites from
+#pod your files using L<Perl::PrereqScanner>.
+#pod
+#pod If some prereqs are not found, you can still add them manually with the
+#pod L<Prereqs|Dist::Zilla::Plugin::Prereqs> plugin.
+#pod
+#pod This plugin will skip the modules shipped within your dist.
+#pod
+#pod =attr extra_scanners
+#pod
+#pod This is an arrayref of scanner names (as expected by Perl::PrereqScanner).
+#pod It will be passed as the C<extra_scanners> parameter to Perl::PrereqScanner.
+#pod
+#pod =attr scanners
+#pod
+#pod This is an arrayref of scanner names (as expected by Perl::PrereqScanner).
+#pod If present, it will be passed as the C<scanners> parameter to
+#pod Perl::PrereqScanner, which means that it will replace the default list
+#pod of scanners.
+#pod
+#pod =attr skips
+#pod
+#pod This is an arrayref of regular expressions, derived from all the 'skip' lines
+#pod in the configuration.  Any module names matching any of these regexes will not
+#pod be registered as prerequisites.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod L<Prereqs|Dist::Zilla::Plugin::Prereqs>, L<Perl::PrereqScanner>.
+#pod
+#pod =head1 CREDITS
+#pod
+#pod This plugin was originally contributed by Jerome Quelin.
+#pod
+#pod =cut
 
 sub mvp_multivalue_args { qw(extra_scanners scanners skips) }
 sub mvp_aliases { return { extra_scanner => 'extra_scanners',
@@ -79,6 +140,8 @@ sub register_prereqs {
     my $files = $self->$method;
 
     foreach my $file (@$files) {
+      # skip binary files
+      next if $file->is_bytes;
       # parse only perl files
       next unless $file->name =~ /\.(?:pm|pl|t|psgi)$/i
                || $file->content =~ /^#!(?:.*)perl(?:$|\s)/;
@@ -100,7 +163,9 @@ sub register_prereqs {
       push @modules, @this_thing;
 
       # parse a file, and merge with existing prereqs
-      my $file_req = $scanner->scan_string($file->content);
+      my $file_req = $scanner->scan_ppi_document(
+        $self->ppi_document_for_file($file)
+      );
 
       $req->add_requirements($file_req);
     }
@@ -108,6 +173,8 @@ sub register_prereqs {
     # remove prereqs shipped with current dist
     $req->clear_requirement($_) for @modules;
 
+    $req->clear_requirement($_) for qw(Config Errno); # never indexed
+
     # remove prereqs from skiplist
     for my $skip (($self->skips || [])->flatten) {
       my $re   = qr/$skip/;
@@ -138,13 +205,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::AutoPrereqs - automatically extract prereqs from your modules
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -216,7 +285,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::AutoVersion;
-{
-  $Dist::Zilla::Plugin::AutoVersion::VERSION = '4.300030';
-}
 # ABSTRACT: take care of numbering versions so you don't have to
+$Dist::Zilla::Plugin::AutoVersion::VERSION = '5.019';
 use Moose;
 with(
   'Dist::Zilla::Role::VersionProvider',
@@ -13,7 +11,22 @@ use namespace::autoclean;
 
 use DateTime 0.44 (); # CLDR fixes
 
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin automatically produces a version string, generally based on the
+#pod current time.  By default, it will be in the format: 1.yyDDDn
+#pod
+#pod =cut
+
+#pod =attr major
+#pod
+#pod The C<major> attribute is just an integer that is meant to store the major
+#pod version number.  If no value is specified in configuration, it will default to
+#pod 1.
+#pod
+#pod This attribute's value can be referred to in the autoversion format template.
+#pod
+#pod =cut
 
 has major => (
   is   => 'ro',
@@ -22,6 +35,20 @@ has major => (
   default  => 1,
 );
 
+#pod =attr format
+#pod
+#pod The format is a L<Text::Template> string that will be rendered to form the
+#pod version.  It is meant to access to one variable, C<$major>, and one subroutine,
+#pod C<cldr>, which will format the current time (in GMT) using CLDR patterns (for
+#pod which consult the L<DateTime> documentation).
+#pod
+#pod The default value is:
+#pod
+#pod   {{ $major }}.{{ cldr('yyDDD') }}
+#pod   {{ sprintf('%01u', ($ENV{N} || 0)) }}
+#pod   {{$ENV{DEV} ? (sprintf '_%03u', $ENV{DEV}) : ''}}
+#pod
+#pod =cut
 
 has time_zone => (
   is       => 'ro',
@@ -60,17 +87,32 @@ sub provide_version {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<PkgVersion|Dist::Zilla::Plugin::PkgVersion>,
+#pod L<PodVersion|Dist::Zilla::Plugin::PodVersion>,
+#pod L<NextRelease|Dist::Zilla::Plugin::NextRelease>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<VersionProvider|Dist::Zilla::Role::VersionProvider>,
+#pod L<TextTemplate|Dist::Zilla::Role::TextTemplate>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::AutoVersion - take care of numbering versions so you don't have to
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -117,7 +159,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,22 @@
 package Dist::Zilla::Plugin::BumpVersion;
-{
-  $Dist::Zilla::Plugin::BumpVersion::VERSION = '4.300030';
-}
 # ABSTRACT: (DEPRECATED) bump the version number by one before building
+$Dist::Zilla::Plugin::BumpVersion::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::BeforeBuild';
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod B<WARNING>  This plugin is deprecated and will be removed.  It is generally
+#pod useless.  It does not do what you think it does.
+#pod
+#pod If loaded, this plugin will ensure that the distribution's version number is
+#pod bumped up by one (in the smallest already-defined version units) before
+#pod building begins.  In other words, if F<dist.ini>'s version reads C<0.002> then
+#pod the newly built dist will be C<0.003>.
+#pod
+#pod =cut
 
 sub before_build {
   my ($self) = @_;
@@ -44,13 +53,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::BumpVersion - (DEPRECATED) bump the version number by one before building
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -68,7 +79,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::CPANFile;
-{
-  $Dist::Zilla::Plugin::CPANFile::VERSION = '4.300030';
-}
 # ABSTRACT: produce a cpanfile prereqs file
+$Dist::Zilla::Plugin::CPANFile::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 with 'Dist::Zilla::Role::FileGatherer';
@@ -11,6 +9,16 @@ use namespace::autoclean;
 
 use Dist::Zilla::File::FromCode;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add a F<cpanfile> file to the distribution.
+#pod
+#pod =attr filename
+#pod
+#pod If given, parameter allows you to specify an alternate name for the generated
+#pod file.  It defaults, of course, to F<cpanfile>.
+#pod
+#pod =cut
 
 has filename => (
   is  => 'ro',
@@ -73,13 +81,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::CPANFile - produce a cpanfile prereqs file
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -98,7 +108,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,8 @@
 package Dist::Zilla::Plugin::ConfirmRelease;
-{
-  $Dist::Zilla::Plugin::ConfirmRelease::VERSION = '4.300030';
-}
+# ABSTRACT: prompt for confirmation before releasing
+$Dist::Zilla::Plugin::ConfirmRelease::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::BeforeRelease';
-# ABSTRACT: prompt for confirmation before releasing
 
 use namespace::autoclean;
 
@@ -17,8 +15,8 @@ sub before_release {
                   map {; $_->plugin_name }
                   $self->zilla->plugins_with(-Releaser)->flatten;
 
-  my $prompt = "*** Preparing to release $tgz with $releasers ***\n"
-             . "Do you want to continue the release process?";
+  $self->log("*** Preparing to release $tgz with $releasers ***");
+  my $prompt = "Do you want to continue the release process?";
 
   my $default = exists $ENV{DZIL_CONFIRMRELEASE_DEFAULT}
               ? $ENV{DZIL_CONFIRMRELEASE_DEFAULT}
@@ -35,17 +33,29 @@ sub before_release {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin prompts the author whether or not to continue before releasing
+#pod the distribution to CPAN.  It gives authors a chance to abort before
+#pod they upload.
+#pod
+#pod The default is "no", but you can set the environment variable
+#pod C<DZIL_CONFIRMRELEASE_DEFAULT> to "yes" if you just want to hit enter to
+#pod release.
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::ConfirmRelease - prompt for confirmation before releasing
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -63,7 +73,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::DistINI;
-{
-  $Dist::Zilla::Plugin::DistINI::VERSION = '4.300030';
-}
 # ABSTRACT: a plugin to add a dist.ini to newly-minted dists
+$Dist::Zilla::Plugin::DistINI::VERSION = '5.019';
 use Moose;
 with qw(Dist::Zilla::Role::FileGatherer);
 
@@ -10,9 +8,49 @@ use Dist::Zilla::File::FromCode;
 
 use Moose::Autobox 0.10; # for ->each_value
 use MooseX::Types::Moose qw(ArrayRef Str);
+use Path::Tiny;
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugins produces a F<dist.ini> file in a new dist, specifying the required
+#pod core attributes from the dist being minted.
+#pod
+#pod This plugin is dead simple and pretty stupid, but should get better as dist
+#pod minting facilities improve.  For example, it will not specify any plugins.
+#pod
+#pod In the meantime, you may be happier with a F<dist.ini> template.
+#pod
+#pod =attr append_file
+#pod
+#pod This parameter may be a filename in the profile's directory to append to the
+#pod generated F<dist.ini> with things like plugins.  In other words, if your make
+#pod this file, called F<plugins.ini>:
+#pod
+#pod   [@Basic]
+#pod   [NextRelease]
+#pod   [@Git]
+#pod
+#pod ...and your F<profile.ini> includes:
+#pod
+#pod   [DistINI]
+#pod   append_file = plugins.ini
+#pod
+#pod ...then the generated C<dist.ini> in a newly-minted dist will look something
+#pod like this:
+#pod
+#pod   name    = My-New-Dist
+#pod   author  = E. Xavier Ample <example@example.com>
+#pod   license = Perl_5
+#pod   copyright_holder = E. Xavier Ample
+#pod   copyright_year   = 2010
+#pod
+#pod   [@Basic]
+#pod   [NextRelease]
+#pod   [@Git]
+#pod
+#pod =cut
 
 sub mvp_multivalue_args { qw(append_file) }
 
@@ -31,12 +69,7 @@ sub gather_files {
   $self->append_file->each_value(sub {
     my $fn = $self->zilla->root->file($_);
 
-    $postlude .= do {
-      use autodie;
-      local $/;
-      open my $fh, '<', $fn;
-      <$fh>;
-    };
+    $postlude .= path($fn)->slurp_utf8;
   });
 
   my $code = sub {
@@ -75,13 +108,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::DistINI - a plugin to add a dist.ini to newly-minted dists
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -129,7 +164,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,152 @@
+package Dist::Zilla::Plugin::Encoding;
+# ABSTRACT: set the encoding of arbitrary files
+$Dist::Zilla::Plugin::Encoding::VERSION = '5.019';
+use Moose;
+with 'Dist::Zilla::Role::EncodingProvider';
+
+use namespace::autoclean;
+
+#pod =head1 SYNOPSIS
+#pod
+#pod This plugin allows you to explicitly set the encoding on some files in your
+#pod distribution. You can either specify the exact set of files (with the
+#pod "filenames" parameter) or provide the regular expressions to check (using
+#pod "match").
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [Encoding]
+#pod   encoding = Latin-3
+#pod
+#pod   filename = t/esperanto.t  ; this file is Esperanto
+#pod   match     = ^t/urkish/    ; these are all Turkish
+#pod
+#pod =cut
+
+sub mvp_multivalue_args { qw(filenames matches) }
+sub mvp_aliases { return { filename => 'filenames', match => 'matches' } }
+
+#pod =attr encoding
+#pod
+#pod This is the encoding to set on the selected files. The special value "bytes"
+#pod can be used to indicate raw files that should not be encoded.
+#pod
+#pod =cut
+
+has encoding => (
+  is   => 'ro',
+  isa  => 'Str',
+  required => 1,
+);
+
+#pod =attr filenames
+#pod
+#pod This is an arrayref of filenames to have their encoding set.
+#pod
+#pod =cut
+
+has filenames => (
+  is   => 'ro',
+  isa  => 'ArrayRef',
+  default => sub { [] },
+);
+
+#pod =attr matches
+#pod
+#pod This is an arrayref of regular expressions.  Any file whose name matches one of
+#pod these regex will have its encoding set.
+#pod
+#pod =cut
+
+has matches => (
+  is   => 'ro',
+  isa  => 'ArrayRef',
+  default => sub { [] },
+);
+
+sub set_file_encodings {
+  my ($self) = @_;
+
+  # never match (at least the filename characters)
+  my $matches_regex = qr/\000/;
+
+  $matches_regex = qr/$matches_regex|$_/ for @{$self->matches};
+
+  # \A\Q$_\E should also handle the `eq` check
+  $matches_regex = qr/$matches_regex|\A\Q$_\E/ for @{$self->filenames};
+
+  for my $file (@{$self->zilla->files}) {
+    next unless $file->name =~ $matches_regex;
+
+    $self->log_debug([
+      'setting encoding of %s to %s',
+      $file->name,
+      $self->encoding,
+    ]);
+
+    $file->encoding($self->encoding);
+  }
+
+  return;
+}
+
+__PACKAGE__->meta->make_immutable;
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Plugin::Encoding - set the encoding of arbitrary files
+
+=head1 VERSION
+
+version 5.019
+
+=head1 SYNOPSIS
+
+This plugin allows you to explicitly set the encoding on some files in your
+distribution. You can either specify the exact set of files (with the
+"filenames" parameter) or provide the regular expressions to check (using
+"match").
+
+In your F<dist.ini>:
+
+  [Encoding]
+  encoding = Latin-3
+
+  filename = t/esperanto.t  ; this file is Esperanto
+  match     = ^t/urkish/    ; these are all Turkish
+
+=head1 ATTRIBUTES
+
+=head2 encoding
+
+This is the encoding to set on the selected files. The special value "bytes"
+can be used to indicate raw files that should not be encoded.
+
+=head2 filenames
+
+This is an arrayref of filenames to have their encoding set.
+
+=head2 matches
+
+This is an arrayref of regular expressions.  Any file whose name matches one of
+these regex will have its encoding set.
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,14 +1,22 @@
 package Dist::Zilla::Plugin::ExecDir;
-{
-  $Dist::Zilla::Plugin::ExecDir::VERSION = '4.300030';
-}
 # ABSTRACT: install a directory's contents as executables
+$Dist::Zilla::Plugin::ExecDir::VERSION = '5.019';
 use Moose;
 
 use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [ExecDir]
+#pod   dir = scripts
+#pod
+#pod If no C<dir> is provided, the default is F<bin>.
+#pod
+#pod =cut
 
 has dir => (
   is   => 'ro',
@@ -31,13 +39,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::ExecDir - install a directory's contents as executables
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -54,7 +64,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,24 @@
 package Dist::Zilla::Plugin::ExtraTests;
-{
-  $Dist::Zilla::Plugin::ExtraTests::VERSION = '4.300030';
-}
 # ABSTRACT: rewrite ./xt tests to ./t tests with skips
+$Dist::Zilla::Plugin::ExtraTests::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::FileMunger';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin rewrites tests found in the following directories:
+#pod
+#pod   ./xt/author  - tests for author testing (env AUTHOR_TESTING is true)
+#pod   ./xt/release - tests for pre-release testers (env RELEASE_TESTING is true)
+#pod   ./xt/smoke   - tests for automated testers (env AUTOMATED_TESTING is true)
+#pod
+#pod The tests are renamed and moved to F<./t>, and they are rewritten to include
+#pod some simple Perl code to skip all included tests if the correct env vars are
+#pod not set.
+#pod
+#pod =cut
 
 sub munge_file {
   my ($self, $file) = @_;
@@ -63,13 +74,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::ExtraTests - rewrite ./xt tests to ./t tests with skips
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -89,7 +102,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,6 @@
 package Dist::Zilla::Plugin::FakeRelease;
-{
-  $Dist::Zilla::Plugin::FakeRelease::VERSION = '4.300030';
-}
 # ABSTRACT: fake plugin to test release
-
+$Dist::Zilla::Plugin::FakeRelease::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::Releaser';
 
@@ -32,17 +29,49 @@ sub release {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod     [FakeRelease]
+#pod     user = CPANAUTHORID ; # optional.
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin is a L<Releaser|Dist::Zilla::Role::Releaser> that does nothing. It
+#pod is directed to plugin authors, who may need a dumb release plugin to test their
+#pod shiny plugin implementing L<BeforeRelease|Dist::Zilla::Role::BeforeRelease>
+#pod and L<AfterRelease|Dist::Zilla::Role::AfterRelease>.
+#pod
+#pod When this plugin does the release, it will just log a message and finish.
+#pod
+#pod If you set the environment variable C<DZIL_FAKERELEASE_FAIL> to a true value,
+#pod the plugin will die instead of doing nothing. This can be useful for
+#pod authors wanting to test reliably that release failed.
+#pod
+#pod You can optionally provide the 'user' parameter, which defaults to 'AUTHORID',
+#pod which will allow things that depend on this metadata
+#pod ( Sometimes provided by L<UploadToCPAN|Dist::Zilla::Plugin::UploadToCPAN> ) to still work.
+#pod ( For example: L<Dist::Zilla::Plugin::Twitter> )
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<ConfirmRelease|Dist::Zilla::Plugin::ConfirmRelease>,
+#pod L<UploadToCPAN|Dist::Zilla::Plugin::UploadToCPAN>.
+#pod
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::FakeRelease - fake plugin to test release
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -79,7 +108,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,19 +1,45 @@
 package Dist::Zilla::Plugin::FileFinder::ByName;
-{
-  $Dist::Zilla::Plugin::FileFinder::ByName::VERSION = '4.300030';
-}
+# ABSTRACT: FileFinder matching on pathnames
+$Dist::Zilla::Plugin::FileFinder::ByName::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::FileFinder';
-# ABSTRACT: FileFinder matching on pathnames
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [FileFinder::ByName / MyFiles]
+#pod   dir   = bin     ; look in the bin/ directory
+#pod   dir   = lib     ; and the lib/ directory
+#pod   file  = *.pl    ; for .pl files
+#pod   match = \.pm$   ; and for .pm files
+#pod   skip  = ignore  ; that don't have "ignore" in the path
+#pod
+#pod =head1 CREDITS
+#pod
+#pod This plugin was originally contributed by Christopher J. Madsen.
+#pod
+#pod =cut
 
 use Moose::Util::TypeConstraints;
 use MooseX::Types::Moose qw(ArrayRef RegexpRef Str);
 
 use Text::Glob 0.08 qw(glob_to_regex_string);
 
+#pod =attr dir
+#pod
+#pod The file must be located in one of the specified directories (relative
+#pod to the root directory of the dist).
+#pod
+#pod =attr file
+#pod
+#pod The filename must match one of the specified patterns (which are
+#pod converted to regexs using L<Text::Glob> and combined with any C<match>
+#pod rules).
+#pod
+#pod =cut
 
 has dirs => (
   is       => 'ro',
@@ -31,6 +57,15 @@ has files => (
   my $type = subtype as ArrayRef[RegexpRef];
   coerce $type, from ArrayRef[Str], via { [map { qr/$_/ } @$_] };
 
+#pod =attr match
+#pod
+#pod The pathname must match one of these regular expressions.
+#pod
+#pod =attr skip
+#pod
+#pod The pathname must I<not> match any of these regular expressions.
+#pod
+#pod =cut
 
   has matches => (
     is      => 'ro',
@@ -101,17 +136,51 @@ sub find_files {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod FileFinder::ByName is a L<FileFinder|Dist::Zilla::Role::FileFinder> that
+#pod selects files by matching the criteria you specify against the pathname.
+#pod
+#pod There are three types of criteria you can use.  C<dir> limits the
+#pod search to a particular directory.  C<match> is a regular expression
+#pod that must match the pathname.  C<skip> is a regular expression that
+#pod must not match the pathname.
+#pod
+#pod Each key can be specified multiple times.  Multiple occurrences of the
+#pod same key are ORed together.  Different keys are ANDed together.  That
+#pod means that to be selected, a file must be located in one of the
+#pod C<dir>s, must match one of the C<match> regexs, and must not match any
+#pod of the C<skip> regexs.
+#pod
+#pod Note that C<file> and C<match> are considered to be the I<same> key.
+#pod They're just different ways to write a regex that the pathname must match.
+#pod
+#pod Omitting a particular key means that criterion will not apply to the
+#pod search.  Omitting all keys will select every file in your dist.
+#pod
+#pod Note: If you need to OR different types of criteria, then use more
+#pod than one instance of FileFinder::ByName.  A
+#pod L<FileFinderUser|Dist::Zilla::Role::FileFinderUser> should allow you
+#pod to specify more than one FileFinder to use.
+#pod
+#pod =for Pod::Coverage
+#pod mvp_aliases
+#pod mvp_multivalue_args
+#pod find_files
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::FileFinder::ByName - FileFinder matching on pathnames
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -186,7 +255,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,7 +1,6 @@
 package Dist::Zilla::Plugin::FileFinder::Filter;
-{
-  $Dist::Zilla::Plugin::FileFinder::Filter::VERSION = '4.300030';
-}
+# ABSTRACT: filter matches from other FileFinders
+$Dist::Zilla::Plugin::FileFinder::Filter::VERSION = '5.019';
 use Moose;
 with(
   'Dist::Zilla::Role::FileFinder',
@@ -9,10 +8,23 @@ with(
     default_finders => [],
   },
 );
-# ABSTRACT: filter matches from other FileFinders
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [FileFinder::Filter / MyFiles]
+#pod   finder = :InstallModules ; find files from :InstallModules
+#pod   finder = :ExecFiles      ; or :ExecFiles
+#pod   skip  = ignore           ; that don't have "ignore" in the path
+#pod
+#pod =head1 CREDITS
+#pod
+#pod This plugin was originally contributed by Christopher J. Madsen.
+#pod
+#pod =cut
 
 use Moose::Util::TypeConstraints;
 use MooseX::Types::Moose qw(ArrayRef RegexpRef Str);
@@ -21,6 +33,17 @@ use MooseX::Types::Moose qw(ArrayRef RegexpRef Str);
   my $type = subtype as ArrayRef[RegexpRef];
   coerce $type, from ArrayRef[Str], via { [map { qr/$_/ } @$_] };
 
+#pod =attr finder
+#pod
+#pod A FileFinder to supply the initial list of files.
+#pod May occur multiple times.
+#pod
+#pod =attr skip
+#pod
+#pod The pathname must I<not> match any of these regular expressions.
+#pod May occur multiple times.
+#pod
+#pod =cut
 
   has skips => (
     is      => 'ro',
@@ -54,17 +77,33 @@ sub find_files {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod FileFinder::Filter is a L<FileFinder|Dist::Zilla::Role::FileFinder> that
+#pod selects files by filtering the selections of other FileFinders.
+#pod
+#pod You specify one or more FileFinders to generate the initial list of
+#pod files.  Any file whose pathname matches any of the C<skip> regexs is
+#pod removed from that list.
+#pod
+#pod =for Pod::Coverage
+#pod mvp_aliases
+#pod mvp_multivalue_args
+#pod find_files
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::FileFinder::Filter - filter matches from other FileFinders
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -110,7 +149,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,8 @@
 package Dist::Zilla::Plugin::FinderCode;
-{
-  $Dist::Zilla::Plugin::FinderCode::VERSION = '4.300030';
-}
+# ABSTRACT: a callback-based FileFinder plugin
+$Dist::Zilla::Plugin::FinderCode::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::FileFinder';
-# ABSTRACT: a callback-based FileFinder plugin
 
 use namespace::autoclean;
 
@@ -52,13 +50,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::FinderCode - a callback-based FileFinder plugin
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -66,7 +66,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::GatherDir::Template;
-{
-  $Dist::Zilla::Plugin::GatherDir::Template::VERSION = '4.300030';
-}
 # ABSTRACT: gather all the files in a directory and use them as templates
+$Dist::Zilla::Plugin::GatherDir::Template::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::Plugin::GatherDir';
 with 'Dist::Zilla::Role::TextTemplate';
@@ -12,20 +10,33 @@ use namespace::autoclean;
 use autodie;
 use Moose::Autobox;
 use Dist::Zilla::File::FromCode;
-
+use Path::Tiny;
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a subclass of the L<GatherDir|Dist::Zilla::Plugin::GatherDir>
+#pod plugin.  It works just like its parent class, except that each
+#pod gathered file is processed through L<Text::Template>.
+#pod
+#pod The variables C<$plugin> and C<$dist> will be provided to the
+#pod template, set to the GatherDir::Template plugin and the Dist::Zilla
+#pod object, respectively.
+#pod
+#pod It is meant to be used when minting dists with C<dzil new>, but could be used
+#pod in building existing dists, too.
+#pod
+#pod =cut
 
 sub _file_from_filename {
   my ($self, $filename) = @_;
 
-  my $template = do {
-    open my $fh, '<', $filename;
-    local $/;
-    <$fh>;
-  };
+  my $template = path($filename)->slurp_utf8;
+
+  my @stat = stat $filename or $self->log_fatal("$filename does not exist!");
 
   return Dist::Zilla::File::FromCode->new({
     name => $filename,
-    mode => ((stat $filename)[2] & 0755) | 0200, # kill world-writeability, make sure owner-writable.
+    mode => ($stat[2] & 0755) | 0200, # kill world-writeability, make sure owner-writable.
     code => sub {
       my ($file_obj) = @_;
       $self->fill_in_string(
@@ -46,13 +57,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::GatherDir::Template - gather all the files in a directory and use them as templates
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -73,7 +86,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::GatherDir;
-{
-  $Dist::Zilla::Plugin::GatherDir::VERSION = '4.300030';
-}
 # ABSTRACT: gather all the files in a directory
+$Dist::Zilla::Plugin::GatherDir::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 use MooseX::Types::Path::Class qw(Dir File);
@@ -10,14 +8,46 @@ with 'Dist::Zilla::Role::FileGatherer';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a very, very simple L<FileGatherer|Dist::Zilla::Role::FileGatherer>
+#pod plugin.  It looks in the directory named in the L</root> attribute and adds all
+#pod the files it finds there.  If the root begins with a tilde, the tilde is
+#pod replaced with the current user's home directory according to L<File::HomeDir>.
+#pod
+#pod Almost every dist will be built with one GatherDir plugin, since it's the
+#pod easiest way to get files from disk into your dist.  Most users just need:
+#pod
+#pod   [GatherDir]
+#pod
+#pod ...and this will pick up all the files from the current directory into the
+#pod dist.  You can use it multiple times, as you can any other plugin, by providing
+#pod a plugin name.  For example, if you want to include external specification
+#pod files into a subdir of your dist, you might write:
+#pod
+#pod   [GatherDir]
+#pod   ; this plugin needs no config and gathers most of your files
+#pod
+#pod   [GatherDir / SpecFiles]
+#pod   ; this plugin gets all the files in the root dir and adds them under ./spec
+#pod   root   = ~/projects/my-project/spec
+#pod   prefix = spec
+#pod
+#pod =cut
 
 use File::Find::Rule;
-use File::HomeDir;
 use File::Spec;
 use Path::Class;
 
 use namespace::autoclean;
 
+#pod =attr root
+#pod
+#pod This is the directory in which to look for files.  If not given, it defaults to
+#pod the dist root -- generally, the place where your F<dist.ini> or other
+#pod configuration file is located.
+#pod
+#pod =cut
 
 has root => (
   is   => 'ro',
@@ -28,6 +58,12 @@ has root => (
   default  => sub { shift->zilla->root },
 );
 
+#pod =attr prefix
+#pod
+#pod This parameter can be set to place the gathered files under a particular
+#pod directory.  See the L<description|DESCRIPTION> above for an example.
+#pod
+#pod =cut
 
 has prefix => (
   is  => 'ro',
@@ -35,6 +71,14 @@ has prefix => (
   default => '',
 );
 
+#pod =attr include_dotfiles
+#pod
+#pod By default, files will not be included if they begin with a dot.  This goes
+#pod both for files and for directories relative to the C<root>.
+#pod
+#pod In almost all cases, the default value (false) is correct.
+#pod
+#pod =cut
 
 has include_dotfiles => (
   is  => 'ro',
@@ -42,6 +86,13 @@ has include_dotfiles => (
   default => 0,
 );
 
+#pod =attr follow_symlinks
+#pod
+#pod By default, directories that are symlinks will not be followed. Note on the
+#pod other hand that in all followed directories, files which are symlinks are
+#pod always gathered.
+#pod
+#pod =cut
 
 has follow_symlinks => (
   is  => 'ro',
@@ -51,6 +102,12 @@ has follow_symlinks => (
 
 sub mvp_multivalue_args { qw(exclude_filename exclude_match) }
 
+#pod =attr exclude_filename
+#pod
+#pod To exclude certain files from being gathered, use the C<exclude_filename>
+#pod option. This may be used multiple times to specify multiple files to exclude.
+#pod
+#pod =cut
 
 has exclude_filename => (
   is   => 'ro',
@@ -58,6 +115,13 @@ has exclude_filename => (
   default => sub { [] },
 );
 
+#pod =attr exclude_match
+#pod
+#pod This is just like C<exclude_filename> but provides a regular expression
+#pod pattern.  Files matching the pattern are not gathered.  This may be used
+#pod multiple times to specify multiple patterns to exclude.
+#pod
+#pod =cut
 
 has exclude_match => (
   is   => 'ro',
@@ -75,7 +139,7 @@ sub gather_files {
   my %is_excluded = map {; $_ => 1 } $self->exclude_filename->flatten;
 
   my $root = "" . $self->root;
-  $root =~ s{^~([\\/])}{File::HomeDir->my_home . $1}e;
+  $root =~ s{^~([\\/])}{require File::HomeDir; File::HomeDir::->my_home . $1}e;
   $root = Path::Class::dir($root);
 
   my $rule = File::Find::Rule->new();
@@ -106,9 +170,11 @@ sub gather_files {
 sub _file_from_filename {
   my ($self, $filename) = @_;
 
+  my @stat = stat $filename or $self->log_fatal("$filename does not exist!");
+
   return Dist::Zilla::File::OnDisk->new({
     name => $filename,
-    mode => (stat $filename)[2] & 0755, # kill world-writeability
+    mode => $stat[2] & 0755, # kill world-writeability
   });
 }
 
@@ -119,13 +185,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::GatherDir - gather all the files in a directory
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -162,7 +230,7 @@ configuration file is located.
 
 =head2 prefix
 
-This parameter can be set to gather all the files found under a common
+This parameter can be set to place the gathered files under a particular
 directory.  See the L<description|DESCRIPTION> above for an example.
 
 =head2 include_dotfiles
@@ -195,7 +263,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::GenerateFile;
-{
-  $Dist::Zilla::Plugin::GenerateFile::VERSION = '4.300030';
-}
 # ABSTRACT: build a custom file from only the plugin configuration
+$Dist::Zilla::Plugin::GenerateFile::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 with (
@@ -14,11 +12,51 @@ use namespace::autoclean;
 
 use Dist::Zilla::File::InMemory;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [GenerateFile]
+#pod   filename    = todo/{{ $dist->name }}-master-plan.txt
+#pod   name_is_template = 1
+#pod   content_is_template = 1
+#pod   content = # Outlines the plan for world domination by {{$dist->name}}
+#pod   content =
+#pod   content = Item 1: Think of an idea!
+#pod   content = Item 2: ?
+#pod   content = Item 3: Profit!
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a file to the distribution.
+#pod
+#pod You can specify the content, as a sequence of lines, in your configuration.
+#pod The specified filename and content might be literals or might be Text::Template
+#pod templates.
+#pod
+#pod =head2 Templating of the content
+#pod
+#pod If you provide C<content_is_template> (or C<is_template>) parameter of "1", the
+#pod content will be run through Text::Template.  The variables C<$plugin> and
+#pod C<$dist> will be provided, set to the GenerateFile plugin and the Dist::Zilla
+#pod object respectively.
+#pod
+#pod If you provide a C<name_is_template> parameter of "1", the filename will be run
+#pod through Text::Template.  The variables C<$plugin> and C<$dist> will be
+#pod provided, set to the GenerateFile plugin and the Dist::Zilla object
+#pod respectively.
+#pod
+#pod =cut
 
 sub mvp_aliases { +{ is_template => 'content_is_template' } }
 
 sub mvp_multivalue_args { qw(content) }
 
+#pod =attr filename
+#pod
+#pod This attribute names the file you want to generate.  It is required.
+#pod
+#pod =cut
 
 has filename => (
   is  => 'ro',
@@ -26,12 +64,24 @@ has filename => (
   required => 1,
 );
 
+#pod =attr content
+#pod
+#pod The C<content> attribute is an arrayref of lines that will be joined together
+#pod with newlines to form the file content.
+#pod
+#pod =cut
 
 has content => (
   is  => 'ro',
   isa => 'ArrayRef',
 );
 
+#pod =attr content_is_template, is_template
+#pod
+#pod This attribute is a bool indicating whether or not the content should be
+#pod treated as a Text::Template template.  By default, it is false.
+#pod
+#pod =cut
 
 has content_is_template => (
   is  => 'ro',
@@ -39,6 +89,14 @@ has content_is_template => (
   default => 0,
 );
 
+#pod =cut
+#pod
+#pod =attr name_is_template
+#pod
+#pod This attribute is a bool indicating whether or not the filename should be
+#pod treated as a Text::Template template.  By default, it is false.
+#pod
+#pod =cut
 
 has name_is_template => (
   is  => 'ro',
@@ -102,20 +160,22 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::GenerateFile - build a custom file from only the plugin configuration
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
 In your F<dist.ini>:
 
   [GenerateFile]
-  filename    = todo/{{ $dist->name =~ s/::/-/r }}_master-plan.txt
+  filename    = todo/{{ $dist->name }}-master-plan.txt
   name_is_template = 1
   content_is_template = 1
   content = # Outlines the plan for world domination by {{$dist->name}}
@@ -171,7 +231,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,19 +1,24 @@
 package Dist::Zilla::Plugin::InlineFiles;
-{
-  $Dist::Zilla::Plugin::InlineFiles::VERSION = '4.300030';
-}
 # ABSTRACT: files in a data section
+$Dist::Zilla::Plugin::InlineFiles::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 with 'Dist::Zilla::Role::FileGatherer';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin exists only to be extended, and gathers all files contained in its
+#pod data section and those of its ancestors.  For more information, see
+#pod L<Data::Section|Data::Section>.
+#pod
+#pod =cut
 
 use Sub::Exporter::ForMethods;
-use Data::Section 0.004 # fixed header_re
+use Data::Section 0.200002 # encoding and bytes
   { installer => Sub::Exporter::ForMethods::method_installer },
-  '-setup';
+  '-setup' => { encoding => 'bytes' };
 use Dist::Zilla::File::InMemory;
 
 sub gather_files {
@@ -37,17 +42,28 @@ sub gather_files {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins inheriting from L<InlineFiles>:
+#pod L<MetaTests|Dist::Zilla::Plugin::MetaTests>,
+#pod L<PodCoverageTests|Dist::Zilla::Plugin::PodCoverageTests>,
+#pod L<PodSyntaxTests|Dist::Zilla::Plugin::PodSyntaxTests>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::InlineFiles - files in a data section
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -68,7 +84,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,18 @@
 package Dist::Zilla::Plugin::License;
-{
-  $Dist::Zilla::Plugin::License::VERSION = '4.300030';
-}
 # ABSTRACT: output a LICENSE file
+$Dist::Zilla::Plugin::License::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::FileGatherer';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a F<LICENSE> file containing the full text of the
+#pod distribution's license, as produced by the C<fulltext> method of the
+#pod dist's L<Software::License> object.
+#pod
+#pod =cut
 
 use Dist::Zilla::File::InMemory;
 
@@ -26,17 +31,43 @@ sub gather_files {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod the C<license> attribute of the L<Dist::Zilla> object to select the license
+#pod to use.
+#pod
+#pod =item *
+#pod
+#pod Dist::Zilla roles:
+#pod L<FileGatherer|Dist::Zilla::Role::FileGatherer>.
+#pod
+#pod =item *
+#pod
+#pod Other modules:
+#pod L<Software::License>,
+#pod L<Software::License::Artistic_2_0>.
+#pod
+#pod =back
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::License - output a LICENSE file
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -72,7 +103,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,6 @@
 package Dist::Zilla::Plugin::MakeMaker::Runner;
-{
-  $Dist::Zilla::Plugin::MakeMaker::Runner::VERSION = '4.300030';
-}
 # ABSTRACT: Test and build dists with a Makefile.PL
-
+$Dist::Zilla::Plugin::MakeMaker::Runner::VERSION = '5.019';
 use Moose;
 with(
   'Dist::Zilla::Role::BuildRunner',
@@ -24,6 +21,12 @@ sub build {
   my $self = shift;
 
   my $make = $self->make_path;
+
+  my $makefile = $^O eq 'VMS' ? 'Descrip.MMS' : 'Makefile';
+
+  return
+    if -e $makefile and (stat 'Makefile.PL')[9] <= (stat $makefile)[9];
+
   system($^X => 'Makefile.PL') and die "error with Makefile.PL\n";
   system($make)                and die "error running $make\n";
 
@@ -31,10 +34,19 @@ sub build {
 }
 
 sub test {
-  my ( $self, $target ) = @_;
+  my ($self, $target, $arg) = @_;
 
   my $make = $self->make_path;
   $self->build;
+
+  my $job_count = $arg && exists $arg->{jobs}
+                ? $arg->{jobs}
+                : $self->default_jobs;
+
+  my $jobs = "j$job_count";
+  my $ho = "HARNESS_OPTIONS";
+  local $ENV{$ho} = $ENV{$ho} ? "$ENV{$ho}:$jobs" : $jobs;
+
   system($make, 'test',
     ( $self->zilla->logger->get_debug ? 'TEST_VERBOSE=1' : () ),
   ) and die "error running $make test\n";
@@ -49,13 +61,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::MakeMaker::Runner - Test and build dists with a Makefile.PL
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -63,7 +77,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,21 +1,34 @@
 package Dist::Zilla::Plugin::MakeMaker;
-{
-  $Dist::Zilla::Plugin::MakeMaker::VERSION = '4.300030';
-}
-
 # ABSTRACT: build a Makefile.PL that uses ExtUtils::MakeMaker
+$Dist::Zilla::Plugin::MakeMaker::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 
 use namespace::autoclean;
 
 use Config;
+use CPAN::Meta::Requirements 2.121; # requirements_for_module
 use List::MoreUtils qw(any uniq);
 
 use Dist::Zilla::File::InMemory;
 use Dist::Zilla::Plugin::MakeMaker::Runner;
 
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will produce an L<ExtUtils::MakeMaker>-powered F<Makefile.PL> for
+#pod the distribution.  If loaded, the L<Manifest|Dist::Zilla::Plugin::Manifest>
+#pod plugin should also be loaded.
+#pod
+#pod =cut
+
+#pod =attr eumm_version
+#pod
+#pod This option declares the version of ExtUtils::MakeMaker required to configure
+#pod and build the distribution.  It defaults to 6.30, which ensures a working
+#pod C<INSTALL_BASE>.  It can be safely set to earlier versions, although I<no
+#pod testing has been done to determine the minimum version actually required>.
+#pod
+#pod =cut
 
 has eumm_version => (
   isa => 'Str',
@@ -23,6 +36,15 @@ has eumm_version => (
   default => '6.30',
 );
 
+#pod =attr make_path
+#pod
+#pod This option sets the path to F<make>, used to build your dist and run tests.
+#pod It defaults to the value for C<make> in L<Config>, or to C<make> if that isn't
+#pod set.
+#pod
+#pod You probably won't need to set this option.
+#pod
+#pod =cut
 
 has 'make_path' => (
   isa => 'Str',
@@ -37,9 +59,10 @@ has '_runner' => (
   default => sub {
     my ($self) = @_;
     Dist::Zilla::Plugin::MakeMaker::Runner->new({
-      zilla       => $self->zilla,
-      plugin_name => $self->plugin_name . '::Runner',
-      make_path   => $self->make_path,
+      zilla        => $self->zilla,
+      plugin_name  => $self->plugin_name . '::Runner',
+      make_path    => $self->make_path,
+      default_jobs => $self->default_jobs,
     });
   },
 );
@@ -57,6 +80,7 @@ with qw(
 );
 
 my $template = q!
+# This file was automatically generated by {{ $generated_by }}.
 use strict;
 use warnings;
 
@@ -68,17 +92,12 @@ use ExtUtils::MakeMaker {{ $eumm_version }};
 
 my {{ $WriteMakefileArgs }}
 
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
-  my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
-  my $pp = $WriteMakefileArgs{PREREQ_PM};
-  for my $mod ( keys %$br ) {
-    if ( exists $pp->{$mod} ) {
-      $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
-    }
-    else {
-      $pp->{$mod} = $br->{$mod};
-    }
-  }
+my {{ $fallback_prereqs }}
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+  delete $WriteMakefileArgs{TEST_REQUIRES};
+  delete $WriteMakefileArgs{BUILD_REQUIRES};
+  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
 }
 
 delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
@@ -102,7 +121,7 @@ sub register_prereqs {
 
   $self->zilla->register_prereqs(
     { phase => 'configure' },
-    'File::ShareDir::Install' => 0.03,
+    'File::ShareDir::Install' => 0.06,
   );
 }
 
@@ -113,7 +132,11 @@ sub share_dir_code {
 
   my $share_dir_map = $self->zilla->_share_dir_map;
   if ( keys %$share_dir_map ) {
-    my $preamble = qq{use File::ShareDir::Install;\n};
+    my $preamble = <<'PREAMBLE';
+use File::ShareDir::Install;
+$File::ShareDir::Install::INCLUDE_DOTFILES = 1;
+$File::ShareDir::Install::INCLUDE_DOTDIRS = 1;
+PREAMBLE
 
     if ( my $dist_share_dir = $share_dir_map->{dist} ) {
       $dist_share_dir = quotemeta $dist_share_dir;
@@ -172,7 +195,12 @@ sub write_makefile_args {
   my $build_prereq
     = $prereqs->requirements_for(qw(build requires))
     ->clone
-    ->add_requirements($prereqs->requirements_for(qw(test requires)))
+    ->clear_requirement('perl')
+    ->as_string_hash;
+
+  my $test_prereq
+    = $prereqs->requirements_for(qw(test requires))
+    ->clone
     ->clear_requirement('perl')
     ->as_string_hash;
 
@@ -186,7 +214,8 @@ sub write_makefile_args {
     EXE_FILES => [ @exe_files ],
 
     CONFIGURE_REQUIRES => $prereqs_dump->(qw(configure requires)),
-    BUILD_REQUIRES     => $build_prereq,
+    keys %$build_prereq ? ( BUILD_REQUIRES => $build_prereq ) : (),
+    keys %$test_prereq ? ( TEST_REQUIRES => $test_prereq ) : (),
     PREREQ_PM          => $prereqs_dump->(qw(runtime   requires)),
 
     test => { TESTS => join q{ }, sort keys %test_dirs },
@@ -197,6 +226,26 @@ sub write_makefile_args {
   return \%write_makefile_args;
 }
 
+sub _dump_as {
+  my ($self, $ref, $name) = @_;
+  require Data::Dumper;
+  my $dumper = Data::Dumper->new( [ $ref ], [ $name ] );
+  $dumper->Sortkeys( 1 );
+  $dumper->Indent( 1 );
+  $dumper->Useqq( 1 );
+  return $dumper->Dump;
+}
+
+sub fallback_prereq_pm {
+  my $self = shift;
+  my $fallback
+    = $self->zilla->prereqs->merged_requires
+    ->clone
+    ->clear_requirement('perl')
+    ->as_string_hash;
+  return $self->_dump_as( $fallback, '*FallbackPrereqs' );
+}
+
 sub setup_installer {
   my ($self, $arg) = @_;
 
@@ -206,14 +255,7 @@ sub setup_installer {
 
   my $perl_prereq = delete $write_makefile_args->{MIN_PERL_VERSION};
 
-  require Data::Dumper;
-  my $makefile_args_dumper = Data::Dumper->new(
-    [ $write_makefile_args ],
-    [ '*WriteMakefileArgs' ],
-  );
-  $makefile_args_dumper->Sortkeys( 1 );
-  $makefile_args_dumper->Indent( 1 );
-  $makefile_args_dumper->Useqq( 1 );
+  my $dumped_args = $self->_dump_as($write_makefile_args, '*WriteMakefileArgs');
 
   my $content = $self->fill_in_string(
     $template,
@@ -221,7 +263,10 @@ sub setup_installer {
       eumm_version      => \($self->eumm_version),
       perl_prereq       => \$perl_prereq,
       share_dir_code    => $self->share_dir_code,
-      WriteMakefileArgs => \($makefile_args_dumper->Dump),
+      fallback_prereqs  => \($self->fallback_prereq_pm),
+      WriteMakefileArgs => \$dumped_args,
+      generated_by      => \sprintf("%s v%s",
+                              ref($self), $self->VERSION || '(dev)'),
     },
   );
 
@@ -243,17 +288,34 @@ has __write_makefile_args => (
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<ModuleBuild|Dist::Zilla::Plugin::ModuleBuild>,
+#pod L<Manifest|Dist::Zilla::Plugin::Manifest>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<BuildRunner|Dist::Zilla::Role::FileGatherer>,
+#pod L<InstallTool|Dist::Zilla::Role::InstallTool>,
+#pod L<PrereqSource|Dist::Zilla::Role::PrereqSource>,
+#pod L<TestRunner|Dist::Zilla::Role::TestRunner>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::MakeMaker - build a Makefile.PL that uses ExtUtils::MakeMaker
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -297,7 +359,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::Manifest;
-{
-  $Dist::Zilla::Plugin::Manifest::VERSION = '4.300030';
-}
 # ABSTRACT: build a MANIFEST file
+$Dist::Zilla::Plugin::Manifest::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 with 'Dist::Zilla::Role::FileGatherer';
@@ -11,6 +9,24 @@ use namespace::autoclean;
 
 use Dist::Zilla::File::FromCode;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod If included, this plugin will produce a F<MANIFEST> file for the distribution,
+#pod listing all of the files it contains.  For obvious reasons, it should be
+#pod included as close to last as possible.
+#pod
+#pod This plugin is included in the L<@Basic|Dist::Zilla::PluginBundle::Basic>
+#pod bundle.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla core plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Manifest>,
+#pod L<ManifestSkip|Dist::Zilla::Plugin::ManifestSkip>.
+#pod
+#pod Other modules: L<ExtUtils::Manifest>.
+#pod
+#pod =cut
 
 sub __fix_filename {
   my ($name) = @_;
@@ -27,10 +43,14 @@ sub gather_files {
 
   my $file = Dist::Zilla::File::FromCode->new({
     name => 'MANIFEST',
+    code_return_type => 'bytes',
     code => sub {
-      $zilla->files->map(sub { $_->name })
-            ->sort->map( sub { __fix_filename($_) } )->join("\n")
-      . "\n",
+      my $generated_by = sprintf "%s v%s", ref($self), $self->VERSION || '(dev)';
+
+      return "# This file was automatically generated by $generated_by.\n"
+           . $zilla->files->map(sub { $_->name })
+               ->sort->map( sub { __fix_filename($_) } )->join("\n")
+           . "\n",
     },
   });
 
@@ -44,13 +64,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::Manifest - build a MANIFEST file
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -75,7 +97,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::ManifestSkip;
-{
-  $Dist::Zilla::Plugin::ManifestSkip::VERSION = '4.300030';
-}
 # ABSTRACT: decline to build files that appear in a MANIFEST.SKIP-like file
+$Dist::Zilla::Plugin::ManifestSkip::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::FilePruner';
 
@@ -10,6 +8,30 @@ use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin reads a MANIFEST.SKIP-like file, as used by L<ExtUtils::MakeMaker>
+#pod and L<ExtUtils::Manifest>, and prunes any files that it declares should be
+#pod skipped.
+#pod
+#pod This plugin is included in the L<@Basic|Dist::Zilla::PluginBundle::Basic>
+#pod bundle.
+#pod
+#pod =attr skipfile
+#pod
+#pod This is the name of the file to read for MANIFEST.SKIP-like content.  It
+#pod defaults, unsurprisingly, to F<MANIFEST.SKIP>.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla core plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<PruneCruft|Dist::Zilla::Plugin::PruneCruft>,
+#pod L<PruneFiles|Dist::Zilla::Plugin::PruneFiles>.
+#pod
+#pod Other modules: L<ExtUtils::Manifest>.
+#pod
+#pod =cut
 
 has skipfile => (is => 'ro', required => 1, default => 'MANIFEST.SKIP');
 
@@ -61,13 +83,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::ManifestSkip - decline to build files that appear in a MANIFEST.SKIP-like file
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -100,7 +124,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,24 @@
 package Dist::Zilla::Plugin::MetaConfig;
-{
-  $Dist::Zilla::Plugin::MetaConfig::VERSION = '4.300030';
-}
 # ABSTRACT: summarize Dist::Zilla configuration into distmeta
+$Dist::Zilla::Plugin::MetaConfig::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::MetaProvider';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a top-level C<x_Dist_Zilla> key to the
+#pod L<distmeta|Dist::Zilla/distmeta> for the distribution.  It describe the
+#pod Dist::Zilla version used as well as all the plugins used.  Each plugin's name,
+#pod package, and version will be included.  Plugins may augment their
+#pod implementation of the L<Dist::Zilla::Role::ConfigDumper> role methods to add
+#pod more data to this dump.
+#pod
+#pod More information may be added to the top-level of this metadata as time goes
+#pod on.
+#pod
+#pod =cut
 
 sub metadata {
   my ($self) = @_;
@@ -45,17 +56,25 @@ sub metadata {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla roles: L<MetaProvider|Dist::Zilla::Role::MetaProvider>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::MetaConfig - summarize Dist::Zilla configuration into distmeta
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -79,7 +98,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,20 +1,27 @@
 package Dist::Zilla::Plugin::MetaJSON;
-{
-  $Dist::Zilla::Plugin::MetaJSON::VERSION = '4.300030';
-}
 # ABSTRACT: produce a META.json
+$Dist::Zilla::Plugin::MetaJSON::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 with 'Dist::Zilla::Role::FileGatherer';
 
 use namespace::autoclean;
 
-use CPAN::Meta::Converter 2.101550; # improved downconversion
-use CPAN::Meta::Validator 2.101550; # improved downconversion
 use Dist::Zilla::File::FromCode;
-use Hash::Merge::Simple ();
-use JSON 2;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add a F<META.json> file to the distribution.
+#pod
+#pod This file is meant to replace the old-style F<META.yml>.  For more information
+#pod on this file, see L<Module::Build::API> and L<CPAN::Meta>.
+#pod
+#pod =attr filename
+#pod
+#pod If given, parameter allows you to specify an alternate name for the generated
+#pod file.  It defaults, of course, to F<META.json>.
+#pod
+#pod =cut
 
 has filename => (
   is  => 'ro',
@@ -22,6 +29,15 @@ has filename => (
   default => 'META.json',
 );
 
+#pod =attr version
+#pod
+#pod This parameter lets you pick what version of the spec to use when generating
+#pod the output.  It defaults to 2 at present, but may be updated to new specs as
+#pod they are released and adopted.
+#pod
+#pod If you want a fixed version, specify it.
+#pod
+#pod =cut
 
 has version => (
   is  => 'ro',
@@ -34,8 +50,16 @@ sub gather_files {
 
   my $zilla = $self->zilla;
 
+  require JSON;
+  JSON->VERSION(2);
+  require CPAN::Meta::Converter;
+  CPAN::Meta::Converter->VERSION(2.101550); # improved downconversion
+  require CPAN::Meta::Validator;
+  CPAN::Meta::Validator->VERSION(2.101550); # improved downconversion
+
   my $file  = Dist::Zilla::File::FromCode->new({
     name => $self->filename,
+    code_return_type => 'text',
     code => sub {
       my $distmeta  = $zilla->distmeta;
 
@@ -50,7 +74,7 @@ sub gather_files {
       my $converter = CPAN::Meta::Converter->new($distmeta);
       my $output    = $converter->convert(version => $self->version);
 
-      JSON->new->ascii(1)->canonical(1)->pretty->encode($output)
+      JSON->new->canonical(1)->pretty->encode($output)
       . "\n";
     },
   });
@@ -62,17 +86,34 @@ sub gather_files {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<Manifest|Dist::Zilla::Plugin::Manifest>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<FileGatherer|Dist::Zilla::Role::FileGatherer>.
+#pod
+#pod Other modules:
+#pod L<CPAN::Meta>,
+#pod L<CPAN::Meta::Spec>, L<JSON>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::MetaJSON - produce a META.json
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -115,7 +156,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,39 @@
 package Dist::Zilla::Plugin::MetaNoIndex;
-{
-  $Dist::Zilla::Plugin::MetaNoIndex::VERSION = '4.300030';
-}
 # ABSTRACT: Stop CPAN from indexing stuff
-
+$Dist::Zilla::Plugin::MetaNoIndex::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::MetaProvider';
 
 use namespace::autoclean;
 
+#pod =encoding utf8
+#pod
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [MetaNoIndex]
+#pod
+#pod   directory = t/author
+#pod   directory = examples
+#pod
+#pod   file = lib/Foo.pm
+#pod
+#pod   package = My::Module
+#pod
+#pod   namespace = My::Module
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin allows you to prevent PAUSE/CPAN from indexing files you don't
+#pod want indexed. This is useful if you build test classes or example classes
+#pod that are used for those purposes only, and are not part of the distribution.
+#pod It does this by adding a C<no_index> block to your F<META.json> (or
+#pod F<META.yml>) file in your distribution.
+#pod
+#pod =for Pod::Coverage mvp_aliases mvp_multivalue_args
+#pod
+#pod =cut
 
 my %ATTR_ALIAS = (
   directories => [ qw(directory dir folder) ],
@@ -29,6 +54,34 @@ sub mvp_aliases {
 
 sub mvp_multivalue_args { return keys %ATTR_ALIAS }
 
+#pod =attr directories
+#pod
+#pod Exclude folders and everything in them, for example: F<author.t>
+#pod
+#pod Aliases: C<folder>, C<dir>, C<directory>
+#pod
+#pod =attr files
+#pod
+#pod Exclude a specific file, for example: F<lib/Foo.pm>
+#pod
+#pod Alias: C<file>
+#pod
+#pod =attr packages
+#pod
+#pod Exclude by package name, for example: C<My::Package>
+#pod
+#pod Aliases: C<class>, C<module>, C<package>
+#pod
+#pod =attr namespaces
+#pod
+#pod Exclude everything under a specific namespace, for example: C<My::Package>
+#pod
+#pod Alias: C<namespace>
+#pod
+#pod B<NOTE:> This will not exclude the package C<My::Package>, only everything
+#pod under it like C<My::Package::Foo>.
+#pod
+#pod =cut
 
 for my $attr (keys %ATTR_ALIAS) {
   has $attr => (
@@ -39,6 +92,11 @@ for my $attr (keys %ATTR_ALIAS) {
   );
 }
 
+#pod =method metadata
+#pod
+#pod Returns a reference to a hash containing the distribution's no_index metadata.
+#pod
+#pod =cut
 
 sub metadata {
   my $self = shift;
@@ -55,17 +113,25 @@ sub metadata {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla roles: L<MetaProvider|Dist::Zilla::Role::MetaProvider>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::MetaNoIndex - Stop CPAN from indexing stuff
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -125,8 +191,6 @@ under it like C<My::Package::Foo>.
 
 Returns a reference to a hash containing the distribution's no_index metadata.
 
-=encoding utf8
-
 =for Pod::Coverage mvp_aliases mvp_multivalue_args
 
 =head1 SEE ALSO
@@ -139,7 +203,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,24 @@
 package Dist::Zilla::Plugin::MetaResources;
-{
-  $Dist::Zilla::Plugin::MetaResources::VERSION = '4.300030';
-}
-
 # ABSTRACT: provide arbitrary "resources" for distribution metadata
+$Dist::Zilla::Plugin::MetaResources::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::MetaProvider';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds resources entries to the distribution's metadata.
+#pod
+#pod   [MetaResources]
+#pod   homepage          = http://example.com/~dude/project.asp
+#pod   bugtracker.web    = http://rt.cpan.org/NoAuth/Bugs.html?Dist=Project
+#pod   bugtracker.mailto = bug-project@rt.cpan.org
+#pod   repository.url    = git://github.com/dude/project.git
+#pod   repository.web    = http://github.com/dude/project
+#pod   repository.type   = git
+#pod
+#pod =cut
 
 has resources => (
   is       => 'ro',
@@ -23,6 +33,10 @@ sub BUILDARGS {
   my $zilla = delete $copy{zilla};
   my $name  = delete $copy{plugin_name};
 
+  if (exists $copy{license} && ref($copy{license}) ne 'ARRAY') {
+      $copy{license} = [ $copy{license} ];
+  }
+
   if (exists $copy{bugtracker}) {
     my $tracker = delete $copy{bugtracker};
     $copy{bugtracker}{web} = $tracker;
@@ -56,17 +70,27 @@ sub metadata {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla roles: L<MetaProvider|Dist::Zilla::Role::MetaProvider>.
+#pod
+#pod Dist::Zilla plugins on the CPAN: L<GithubMeta|Dist::Zilla::Plugin::GithubMeta>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::MetaResources - provide arbitrary "resources" for distribution metadata
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -92,7 +116,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,34 @@
 package Dist::Zilla::Plugin::MetaTests;
-{
-  $Dist::Zilla::Plugin::MetaTests::VERSION = '4.300030';
-}
 # ABSTRACT: common extra tests for META.yml
+$Dist::Zilla::Plugin::MetaTests::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::Plugin::InlineFiles';
 with 'Dist::Zilla::Role::PrereqSource';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This is an extension of L<Dist::Zilla::Plugin::InlineFiles>, providing the
+#pod following files:
+#pod
+#pod   xt/release/meta-yaml.t - a standard Test::CPAN::Meta test
+#pod
+#pod Note that this test doesn't actually do anything unless you have
+#pod L<Test::CPAN::Meta> installed.
+#pod
+#pod L<Test::CPAN::Meta> will be added as a C<develop requires> dependency.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<MetaResources|Dist::Zilla::Plugin::MetaResources>,
+#pod L<MetaNoIndex|Dist::Zilla::Plugin::MetaNoIndex>,
+#pod L<MetaYAML|Dist::Zilla::Plugin::MetaYAML>,
+#pod L<MetaJSON|Dist::Zilla::Plugin::MetaJSON>,
+#pod L<MetaConfig|Dist::Zilla::Plugin::MetaConfig>.
+#pod
+#pod =cut
 
 # Register the release test prereq as a "develop requires"
 # so it will be listed in "dzil listdeps --author"
@@ -28,13 +48,15 @@ __PACKAGE__->meta->make_immutable;
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::MetaTests - common extra tests for META.yml
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -46,6 +68,8 @@ following files:
 Note that this test doesn't actually do anything unless you have
 L<Test::CPAN::Meta> installed.
 
+L<Test::CPAN::Meta> will be added as a C<develop requires> dependency.
+
 =head1 SEE ALSO
 
 Core Dist::Zilla plugins:
@@ -61,7 +85,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -71,9 +95,8 @@ the same terms as the Perl 5 programming language system itself.
 __DATA__
 ___[ xt/release/distmeta.t ]___
 #!perl
+# This file was automatically generated by Dist::Zilla::Plugin::MetaTests.
 
-use Test::More;
+use Test::CPAN::Meta;
 
-eval "use Test::CPAN::Meta";
-plan skip_all => "Test::CPAN::Meta required for testing META.yml" if $@;
 meta_yaml_ok();
@@ -1,18 +1,25 @@
 package Dist::Zilla::Plugin::MetaYAML;
-{
-  $Dist::Zilla::Plugin::MetaYAML::VERSION = '4.300030';
-}
 # ABSTRACT: produce a META.yml
+$Dist::Zilla::Plugin::MetaYAML::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 with 'Dist::Zilla::Role::FileGatherer';
 
+use Try::Tiny;
 use namespace::autoclean;
 
-use CPAN::Meta::Converter 2.101550; # improved downconversion
-use CPAN::Meta::Validator 2.101550; # improved downconversion
-use Hash::Merge::Simple ();
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add a F<META.yml> file to the distribution.
+#pod
+#pod For more information on this file, see L<Module::Build::API> and L<CPAN::Meta>.
+#pod
+#pod =attr filename
+#pod
+#pod If given, parameter allows you to specify an alternate name for the generated
+#pod file.  It defaults, of course, to F<META.yml>.
+#pod
+#pod =cut
 
 has filename => (
   is  => 'ro',
@@ -20,6 +27,18 @@ has filename => (
   default => 'META.yml',
 );
 
+#pod =attr version
+#pod
+#pod This parameter lets you pick what version of the spec to use when generating
+#pod the output.  It defaults to 1.4, the most commonly supported version at
+#pod present.
+#pod
+#pod B<This may change without notice in the future.>
+#pod
+#pod Once version 2 of the META file spec is more widely supported, this may default
+#pod to 2.
+#pod
+#pod =cut
 
 has version => (
   is  => 'ro',
@@ -32,11 +51,16 @@ sub gather_files {
 
   require Dist::Zilla::File::FromCode;
   require YAML::Tiny;
+  require CPAN::Meta::Converter;
+  CPAN::Meta::Converter->VERSION(2.101550); # improved downconversion
+  require CPAN::Meta::Validator;
+  CPAN::Meta::Validator->VERSION(2.101550); # improved downconversion
 
   my $zilla = $self->zilla;
 
   my $file  = Dist::Zilla::File::FromCode->new({
     name => $self->filename,
+    code_return_type => 'text',
     code => sub {
       my $distmeta  = $zilla->distmeta;
 
@@ -50,8 +74,13 @@ sub gather_files {
 
       my $converter = CPAN::Meta::Converter->new($distmeta);
       my $output    = $converter->convert(version => $self->version);
-
-      YAML::Tiny::Dump($output);
+      my $yaml = try {
+        YAML::Tiny->new($output)->write_string; # text!
+      }
+      catch {
+        $self->log_fatal("Could not create YAML string: " . YAML::Tiny->errstr)
+      };
+      return $yaml;
     },
   });
 
@@ -62,17 +91,34 @@ sub gather_files {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<Manifest|Dist::Zilla::Plugin::Manifest>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<FileGatherer|Dist::Zilla::Role::FileGatherer>.
+#pod
+#pod Other modules:
+#pod L<CPAN::Meta>,
+#pod L<CPAN::Meta::Spec>, L<YAML>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::MetaYAML - produce a META.yml
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -117,7 +163,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::ModuleBuild;
-{
-  $Dist::Zilla::Plugin::ModuleBuild::VERSION = '4.300030';
-}
 # ABSTRACT: build a Build.PL that uses Module::Build
+$Dist::Zilla::Plugin::ModuleBuild::VERSION = '5.019';
 use List::MoreUtils qw(any uniq);
 use Moose;
 use Moose::Autobox;
@@ -14,11 +12,37 @@ with (
 
 use namespace::autoclean;
 
+use CPAN::Meta::Requirements 2.121; # requirements_for_module
 use Dist::Zilla::File::InMemory;
 use List::MoreUtils qw(any uniq);
 use Data::Dumper;
 
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will create a F<Build.PL> for installing the dist using
+#pod L<Module::Build>.
+#pod
+#pod =cut
+
+#pod =attr mb_version
+#pod
+#pod B<Optional:> Specify the minimum version of L<Module::Build> to depend on.
+#pod
+#pod Defaults to 0.3601
+#pod
+#pod =attr mb_class
+#pod
+#pod B<Optional:> Specify the class to use to create the build object.  Defaults
+#pod to C<Module::Build> itself.  If another class is specified, then the value
+#pod of mb_lib will be used to generate a line like C<use lib 'inc'> to be added
+#pod to the generated Build.PL file.
+#pod
+#pod =attr mb_lib
+#pod
+#pod B<Optional:> Specify the list of directories to be passed to lib when using 
+#pod mb_class. Defaults to C<inc>. 
+#pod
+#pod =cut
 
 has 'mb_version' => (
   isa => 'Str',
@@ -39,6 +63,7 @@ has 'mb_lib' => (
 );
 
 my $template = q|
+# This file was automatically generated by {{ $generated_by }}.
 use strict;
 use warnings;
 
@@ -47,6 +72,13 @@ use Module::Build {{ $plugin->mb_version }};
 
 my {{ $module_build_args }}
 
+my {{ $fallback_build_prereqs }}
+
+unless ( eval { Module::Build->VERSION(0.4004) } ) {
+  delete $module_build_args{test_requires};
+  $module_build_args{build_requires} = \%fallback_build_requires;
+}
+
 my $build = {{ $plugin->mb_class }}->new(%module_build_args);
 
 $build->create_build_script;
@@ -63,6 +95,16 @@ sub _use_custom_class {
   }
 }
 
+sub _dump_as {
+  my ($self, $ref, $name) = @_;
+  require Data::Dumper;
+  my $dumper = Data::Dumper->new( [ $ref ], [ $name ] );
+  $dumper->Sortkeys( 1 );
+  $dumper->Indent( 1 );
+  $dumper->Useqq( 1 );
+  return $dumper->Dump;
+}
+
 sub register_prereqs {
   my ($self) = @_;
 
@@ -90,14 +132,11 @@ sub module_build_args {
   my %prereqs = (
     configure_requires => $prereqs->requirements_for(qw(configure requires)),
     build_requires     => $prereqs->requirements_for(qw(build     requires)),
+    test_requires      => $prereqs->requirements_for(qw(test      requires)),
     requires           => $prereqs->requirements_for(qw(runtime   requires)),
     recommends         => $prereqs->requirements_for(qw(runtime   recommends)),
   );
 
-  $prereqs{build_requires} = $prereqs{build_requires}->clone->add_requirements(
-    $prereqs->requirements_for(qw(test requires))
-  );
-
   (my $name = $self->zilla->name) =~ s/-/::/g;
 
   return {
@@ -115,6 +154,17 @@ sub module_build_args {
   };
 }
 
+sub fallback_build_requires {
+  my $self = shift;
+  my $prereqs = $self->zilla->prereqs;
+  my $merged = CPAN::Meta::Requirements->new;
+  for my $phase ( qw/build test/ ) {
+    my $req = $prereqs->requirements_for($phase, 'requires');
+    $merged->add_requirements( $req );
+  };
+  return $self->_dump_as( $merged->as_string_hash, '*fallback_build_requires' );
+}
+
 sub setup_installer {
   my ($self, $arg) = @_;
 
@@ -125,19 +175,18 @@ sub setup_installer {
 
   $self->__module_build_args($module_build_args);
 
-  my $module_build_dumper = Data::Dumper->new(
-    [ $module_build_args ],
-    [ '*module_build_args' ],
-  );
-  $module_build_dumper->Sortkeys( 1 );
-  $module_build_dumper->Indent( 1 );
-  $module_build_dumper->Useqq( 1 );
+  my $dumped_args = $self->_dump_as($module_build_args, '*module_build_args');
+
+  my $fallback_build_requires = $self->fallback_build_requires;
 
   my $content = $self->fill_in_string(
     $template,
     {
-      plugin            => \$self,
-      module_build_args => \($module_build_dumper->Dump),
+      plugin                  => \$self,
+      module_build_args       => \$dumped_args,
+      fallback_build_prereqs  => \$fallback_build_requires,
+      generated_by            => \sprintf("%s v%s",
+                                    ref($self), $self->VERSION || '(dev)'),
     },
   );
 
@@ -159,17 +208,32 @@ has __module_build_args => (
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<@Filter|Dist::Zilla::PluginBundle::Filter>,
+#pod L<MakeMaker|Dist::Zilla::Plugin::MakeMaker>,
+#pod L<Manifest|Dist::Zilla::Plugin::Manifest>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<BuildPL|Dist::Zilla::Role::BuildPL>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::ModuleBuild - build a Build.PL that uses Module::Build
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -213,7 +277,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,21 @@
 package Dist::Zilla::Plugin::ModuleShareDirs;
-{
-  $Dist::Zilla::Plugin::ModuleShareDirs::VERSION = '4.300030';
-}
 # ABSTRACT: install a directory's contents as module-based "ShareDir" content
+$Dist::Zilla::Plugin::ModuleShareDirs::VERSION = '5.019';
 use Moose;
 
 use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [ModuleShareDirs]
+#pod   Foo::Bar = shares/foo_bar
+#pod   Foo::Baz = shares/foo_baz
+#pod
+#pod =cut
 
 has _module_map => (
   is   => 'ro',
@@ -62,13 +69,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::ModuleShareDirs - install a directory's contents as module-based "ShareDir" content
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -84,7 +93,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,6 @@
 package Dist::Zilla::Plugin::NextRelease;
-{
-  $Dist::Zilla::Plugin::NextRelease::VERSION = '4.300030';
-}
 # ABSTRACT: update the next release number in your changelog
-
+$Dist::Zilla::Plugin::NextRelease::VERSION = '5.019';
 use namespace::autoclean;
 
 use Moose;
@@ -14,6 +11,7 @@ with (
 );
 
 use DateTime 0.44; # CLDR fixes
+use Path::Tiny;
 use Moose::Util::TypeConstraints;
 use String::Formatter 0.100680 stringf => {
   -as => '_format_version',
@@ -47,7 +45,7 @@ has time_zone => (
 has format => (
   is  => 'ro',
   isa => 'Str', # should be more validated Later -- rjbs, 2008-06-05
-  default => '%-9v %{yyyy-MM-dd HH:mm:ss VVVV}d',
+  default => '%-9v %{yyyy-MM-dd HH:mm:ssZZZZZ VVVV}d%{ (TRIAL RELEASE)}T',
 );
 
 has filename => (
@@ -119,17 +117,11 @@ sub munge_files {
 sub after_release {
   my ($self) = @_;
   my $filename = $self->filename;
+  my ($gathered_file) = grep { $_->name eq $filename } @{ $self->zilla->files };
+  my $iolayer = sprintf(":raw:encoding(%s)", $gathered_file->encoding);
 
   # read original changelog
-  my $content = do {
-    local $/;
-    open my $in_fh, '<', $filename
-      or Carp::croak("can't open $filename for reading: $!");
-
-    # Win32
-    binmode $in_fh, ':raw';
-    <$in_fh>
-  };
+  my $content = path($filename)->slurp({ binmode => $iolayer});
 
   # add the version and date to file content
   my $delim  = $self->delim;
@@ -141,29 +133,132 @@ sub after_release {
   $self->log_debug([ 'updating contents of %s on disk', $update_fn ]);
 
   # and finally rewrite the changelog on disk
-  open my $out_fh, '>', $update_fn
-    or Carp::croak("can't open $update_fn for writing: $!");
-
-  # Win32.
-  binmode $out_fh, ':raw';
-  print $out_fh $content or Carp::croak("error writing to $update_fn: $!");
-  close $out_fh or Carp::croak("error closing $update_fn: $!");
+  path($update_fn)->spew({binmode => $iolayer}, $content);
 }
 
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [NextRelease]
+#pod
+#pod In your F<Changes> file:
+#pod
+#pod   {{$NEXT}}
+#pod
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod Tired of having to update your F<Changes> file by hand with the new
+#pod version and release date / time each time you release your distribution?
+#pod Well, this plugin is for you.
+#pod
+#pod Add this plugin to your F<dist.ini>, and the following to your
+#pod F<Changes> file:
+#pod
+#pod   {{$NEXT}}
+#pod
+#pod The C<NextRelease> plugin will then do 2 things:
+#pod
+#pod =over 4
+#pod
+#pod =item * At build time, this special marker will be replaced with the
+#pod version and the build date, to form a standard changelog header. This
+#pod will be done to the in-memory file - the original F<Changes> file won't
+#pod be updated.
+#pod
+#pod =item * After release (when running C<dzil release>), since the version
+#pod and build date are now part of your dist's history, the real F<Changes>
+#pod file (not the in-memory one) will be updated with this piece of
+#pod information.
+#pod
+#pod =back
+#pod
+#pod The module accepts the following options in its F<dist.ini> section:
+#pod
+#pod =begin :list
+#pod
+#pod = filename
+#pod the name of your changelog file;  defaults to F<Changes>
+#pod
+#pod = update_filename
+#pod the file to which to write an updated changelog to; defaults to the C<filename>
+#pod
+#pod = format
+#pod sprintf-like string used to compute the next value of C<{{$NEXT}}>;
+#pod defaults to C<%-9v %{yyyy-MM-dd HH:mm:ss VVVV}d>
+#pod
+#pod = time_zone
+#pod the timezone to use when generating the date;  defaults to I<local>
+#pod
+#pod = user_stash
+#pod the name of the stash where the user's name and email address can be found;
+#pod defaults to C<%User>
+#pod
+#pod =end :list
+#pod
+#pod The module allows the following sprintf-like format codes in the C<format>:
+#pod
+#pod =begin :list
+#pod
+#pod = C<%v>
+#pod The distribution version
+#pod
+#pod = C<%{-TRIAL}T>
+#pod Expands to -TRIAL (or any other supplied string) if this
+#pod is a trial release, or the empty string if not.  A bare C<%T> means
+#pod C<%{-TRIAL}T>.
+#pod
+#pod = C<%{-TRIAL}V>
+#pod Equivalent to C<%v%{-TRIAL}T>, to allow for the application of modifiers such
+#pod as space padding to the entire version string produced.
+#pod
+#pod = C<%{CLDR format}d>
+#pod The date of the release.  You can use any CLDR format supported by
+#pod L<DateTime>.  You must specify the format; there is no default.
+#pod
+#pod = C<%U>
+#pod The name of the user making this release (from C<user_stash>).
+#pod
+#pod = C<%E>
+#pod The email address of the user making this release (from C<user_stash>).
+#pod
+#pod = C<%n>
+#pod A newline
+#pod
+#pod = C<%t>
+#pod A tab
+#pod
+#pod =end :list
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<AutoVersion|Dist::Zilla::Plugin::AutoVersion>,
+#pod L<PkgVersion|Dist::Zilla::Plugin::PkgVersion>,
+#pod L<PodVersion|Dist::Zilla::Plugin::PodVersion>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<AfterRelease|Dist::Zilla::Plugin::AfterRelease>,
+#pod L<FileMunger|Dist::Zilla::Role::FileMunger>,
+#pod L<TextTemplate|Dist::Zilla::Role::TextTemplate>.
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::NextRelease - update the next release number in your changelog
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -290,7 +385,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::PkgDist;
-{
-  $Dist::Zilla::Plugin::PkgDist::VERSION = '4.300030';
-}
 # ABSTRACT: add a $DIST to your packages
+$Dist::Zilla::Plugin::PkgDist::VERSION = '5.019';
 use Moose;
 with(
   'Dist::Zilla::Role::FileMunger',
@@ -14,8 +12,23 @@ with(
 
 use namespace::autoclean;
 
-use PPI;
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add a line like the following to each package in each Perl
+#pod module or program (more or less) within the distribution:
+#pod
+#pod   { our $DIST = 'My-CPAN-Dist'; } # where 'My-CPAN-Dist' is your dist name
+#pod
+#pod It will skip any package declaration that includes a newline between the
+#pod C<package> keyword and the package name, like:
+#pod
+#pod   package
+#pod     Foo::Bar;
+#pod
+#pod This sort of declaration is also ignored by the CPAN toolchain, and is
+#pod typically used when doing monkey patching or other tricky things.
+#pod
+#pod =cut
 
 sub munge_files {
   my ($self) = @_;
@@ -93,13 +106,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::PkgDist - add a $DIST to your packages
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -123,7 +138,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::PkgVersion;
-{
-  $Dist::Zilla::Plugin::PkgVersion::VERSION = '4.300030';
-}
 # ABSTRACT: add a $VERSION to your packages
+$Dist::Zilla::Plugin::PkgVersion::VERSION = '5.019';
 use Moose;
 with(
   'Dist::Zilla::Role::FileMunger',
@@ -17,6 +15,62 @@ use MooseX::Types::Perl qw(LaxVersionStr);
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod in dist.ini
+#pod
+#pod   [PkgVersion]
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add lines like the following to each package in each Perl
+#pod module or program (more or less) within the distribution:
+#pod
+#pod   $MyModule::VERSION = 0.001;
+#pod
+#pod ...where 0.001 is the version of the dist, and MyModule is the name of the
+#pod package being given a version.  (In other words, it always uses fully-qualified
+#pod names to assign versions.)
+#pod
+#pod It will skip any package declaration that includes a newline between the
+#pod C<package> keyword and the package name, like:
+#pod
+#pod   package
+#pod     Foo::Bar;
+#pod
+#pod This sort of declaration is also ignored by the CPAN toolchain, and is
+#pod typically used when doing monkey patching or other tricky things.
+#pod
+#pod =attr die_on_existing_version
+#pod
+#pod If true, then when PkgVersion sees an existing C<$VERSION> assignment, it will
+#pod throw an exception rather than skip the file.  This attribute defaults to
+#pod false.
+#pod
+#pod =attr die_on_line_insertion
+#pod
+#pod By default, PkgVersion look for a blank line after each C<package> statement.
+#pod If it finds one, it inserts the C<$VERSION> assignment on that line.  If it
+#pod doesn't, it will insert a new line, which means the shipped copy of the module
+#pod will have different line numbers (off by one) than the source.  If
+#pod C<die_on_line_insertion> is true, PkgVersion will raise an exception rather
+#pod than insert a new line.
+#pod
+#pod =attr finder
+#pod
+#pod =for stopwords FileFinder
+#pod
+#pod This is the name of a L<FileFinder|Dist::Zilla::Role::FileFinder> for finding
+#pod modules to edit.  The default value is C<:InstallModules> and C<:ExecFiles>;
+#pod this option can be used more than once.
+#pod
+#pod Other predefined finders are listed in
+#pod L<Dist::Zilla::Role::FileFinderUser/default_finders>.
+#pod You can define your own with the
+#pod L<[FileFinder::ByName]|Dist::Zilla::Plugin::FileFinder::ByName> and
+#pod L<[FileFinder::Filter]|Dist::Zilla::Plugin::FileFinder::Filter> plugins.
+#pod
+#pod =cut
 
 sub munge_files {
   my ($self) = @_;
@@ -27,15 +81,26 @@ sub munge_files {
 sub munge_file {
   my ($self, $file) = @_;
 
-  # XXX: for test purposes, for now! evil! -- rjbs, 2010-03-17
-  return                          if $file->name    =~ /^corpus\//;
+  if ($file->is_bytes) {
+    $self->log_debug($file->name . " has 'bytes' encoding, skipping...");
+    return;
+  }
 
-  return                          if $file->name    =~ /\.t$/i;
-  return $self->munge_perl($file) if $file->name    =~ /\.(?:pm|pl)$/i;
-  return $self->munge_perl($file) if $file->content =~ /^#!(?:.*)perl(?:$|\s)/;
-  return;
+  return $self->munge_perl($file);
 }
 
+has die_on_existing_version => (
+  is  => 'ro',
+  isa => 'Bool',
+  default => 0,
+);
+
+has die_on_line_insertion => (
+  is  => 'ro',
+  isa => 'Bool',
+  default => 0,
+);
+
 sub munge_perl {
   my ($self, $file) = @_;
 
@@ -47,17 +112,25 @@ sub munge_perl {
   my $document = $self->ppi_document_for_file($file);
 
   if ($self->document_assigns_to_variable($document, '$VERSION')) {
+    if ($self->die_on_existing_version) {
+      $self->log_fatal([ 'existing assignment to $VERSION in %s', $file->name ]);
+    }
+
     $self->log([ 'skipping %s: assigns to $VERSION', $file->name ]);
     return;
   }
 
-  return unless my $package_stmts = $document->find('PPI::Statement::Package');
+  my $package_stmts = $document->find('PPI::Statement::Package');
+  unless ($package_stmts) {
+    $self->log_debug([ 'skipping %s: no package statement found', $file->name ]);
+    return;
+  }
 
   my %seen_pkg;
 
+  my $munged = 0;
   for my $stmt (@$package_stmts) {
     my $package = $stmt->namespace;
-
     if ($seen_pkg{ $package }++) {
       $self->log([ 'skipping package re-declaration for %s', $package ]);
       next;
@@ -68,14 +141,17 @@ sub munge_perl {
       next;
     }
 
+    $self->log("non-ASCII package name is likely to cause problems")
+      if $package =~ /\P{ASCII}/;
+
+    $self->log("non-ASCII version is likely to cause problems")
+      if $version =~ /\P{ASCII}/;
+
     # the \x20 hack is here so that when we scan *this* document we don't find
     # an assignment to version; it shouldn't be needed, but it's been annoying
     # enough in the past that I'm keeping it here until tests are better
     my $trial = $self->zilla->is_trial ? ' # TRIAL' : '';
-    my $perl = "{\n  \$$package\::VERSION\x20=\x20'$version';$trial\n}\n";
-
-    my $version_doc = PPI::Document->new(\$perl);
-    my @children = $version_doc->schildren;
+    my $perl = "\$$package\::VERSION\x20=\x20'$version';$trial";
 
     $self->log_debug([
       'adding $VERSION assignment to %s in %s',
@@ -83,28 +159,87 @@ sub munge_perl {
       $file->name,
     ]);
 
-    Carp::carp("error inserting version in " . $file->name)
-      unless $stmt->insert_after($children[0]->clone)
-      and    $stmt->insert_after( PPI::Token::Whitespace->new("\n") );
+    my $blank;
+
+    {
+      my $curr = $stmt;
+      while (1) {
+        my $find = $document->find(sub {
+          return $_[1]->line_number == $curr->line_number + 1;
+          return;
+        });
+
+        last unless $find and @$find == 1;
+
+        if ($find->[0]->isa('PPI::Token::Comment')) {
+          $curr = $find->[0];
+          next;
+        }
+
+        if ("$find->[0]" =~ /\A\s*\z/) {
+          $blank = $find->[0];
+        }
+
+        last;
+      }
+    }
+
+    $perl = $blank ? "$perl\n" : "\n$perl";
+
+    # Why can't I use PPI::Token::Unknown? -- rjbs, 2014-01-11
+    my $bogus_token = PPI::Token::Comment->new($perl);
+
+    if ($blank) {
+      Carp::carp("error inserting version in " . $file->name)
+        unless $blank->insert_after($bogus_token);
+      $blank->delete;
+    } else {
+      my $method = $self->die_on_line_insertion ? 'log_fatal' : 'log';
+      $self->$method([
+        'no blank line for $VERSION after package %s statement on line %s',
+        $stmt->namespace,
+        $stmt->line_number,
+      ]);
+
+      Carp::carp("error inserting version in " . $file->name)
+        unless $stmt->insert_after($bogus_token);
+    }
+
+    $munged = 1;
   }
 
-  $self->save_ppi_document_to_file($document, $file);
+  $self->save_ppi_document_to_file($document, $file) if $munged;
 }
 
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<PodVersion|Dist::Zilla::Plugin::PodVersion>,
+#pod L<AutoVersion|Dist::Zilla::Plugin::AutoVersion>,
+#pod L<NextRelease|Dist::Zilla::Plugin::NextRelease>.
+#pod
+#pod Other Dist::Zilla plugins:
+#pod L<OurPkgVersion|Dist::Zilla::Plugin::OurPkgVersion> inserts version
+#pod numbers using C<our $VERSION = '...';> and without changing line numbers
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::PkgVersion - add a $VERSION to your packages
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -117,9 +252,7 @@ in dist.ini
 This plugin will add lines like the following to each package in each Perl
 module or program (more or less) within the distribution:
 
-  {
-    $MyModule::VERSION = 0.001;
-  }
+  $MyModule::VERSION = 0.001;
 
 ...where 0.001 is the version of the dist, and MyModule is the name of the
 package being given a version.  (In other words, it always uses fully-qualified
@@ -134,6 +267,37 @@ C<package> keyword and the package name, like:
 This sort of declaration is also ignored by the CPAN toolchain, and is
 typically used when doing monkey patching or other tricky things.
 
+=head1 ATTRIBUTES
+
+=head2 die_on_existing_version
+
+If true, then when PkgVersion sees an existing C<$VERSION> assignment, it will
+throw an exception rather than skip the file.  This attribute defaults to
+false.
+
+=head2 die_on_line_insertion
+
+By default, PkgVersion look for a blank line after each C<package> statement.
+If it finds one, it inserts the C<$VERSION> assignment on that line.  If it
+doesn't, it will insert a new line, which means the shipped copy of the module
+will have different line numbers (off by one) than the source.  If
+C<die_on_line_insertion> is true, PkgVersion will raise an exception rather
+than insert a new line.
+
+=head2 finder
+
+=for stopwords FileFinder
+
+This is the name of a L<FileFinder|Dist::Zilla::Role::FileFinder> for finding
+modules to edit.  The default value is C<:InstallModules> and C<:ExecFiles>;
+this option can be used more than once.
+
+Other predefined finders are listed in
+L<Dist::Zilla::Role::FileFinderUser/default_finders>.
+You can define your own with the
+L<[FileFinder::ByName]|Dist::Zilla::Plugin::FileFinder::ByName> and
+L<[FileFinder::Filter]|Dist::Zilla::Plugin::FileFinder::Filter> plugins.
+
 =head1 SEE ALSO
 
 Core Dist::Zilla plugins:
@@ -151,7 +315,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,29 @@
 package Dist::Zilla::Plugin::PodCoverageTests;
-{
-  $Dist::Zilla::Plugin::PodCoverageTests::VERSION = '4.300030';
-}
 # ABSTRACT: a release test for Pod coverage
+$Dist::Zilla::Plugin::PodCoverageTests::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::Plugin::InlineFiles';
 with 'Dist::Zilla::Role::PrereqSource';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This is an extension of L<Dist::Zilla::Plugin::InlineFiles>, providing the
+#pod following files:
+#pod
+#pod   xt/release/pod-coverage.t - a standard Test::Pod::Coverage test
+#pod
+#pod This test uses L<Pod::Coverage::TrustPod> to check your Pod coverage.  This
+#pod means that to indicate that some subs should be treated as covered, even if no
+#pod documentation can be found, you can add:
+#pod
+#pod   =for Pod::Coverage sub_name other_sub this_one_too
+#pod
+#pod L<Test::Pod::Coverage> C<1.08> and L<Pod::Coverage::TrustPod> will be added as
+#pod C<develop requires> dependencies.
+#pod
+#pod =cut
 
 # Register the release test prereq as a "develop requires"
 # so it will be listed in "dzil listdeps --author"
@@ -30,13 +45,15 @@ __PACKAGE__->meta->make_immutable;
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::PodCoverageTests - a release test for Pod coverage
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -51,13 +68,16 @@ documentation can be found, you can add:
 
   =for Pod::Coverage sub_name other_sub this_one_too
 
+L<Test::Pod::Coverage> C<1.08> and L<Pod::Coverage::TrustPod> will be added as
+C<develop requires> dependencies.
+
 =head1 AUTHOR
 
 Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -67,15 +87,9 @@ the same terms as the Perl 5 programming language system itself.
 __DATA__
 ___[ xt/release/pod-coverage.t ]___
 #!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodCoverageTests.
 
-use Test::More;
-
-eval "use Test::Pod::Coverage 1.08";
-plan skip_all => "Test::Pod::Coverage 1.08 required for testing POD coverage"
-  if $@;
-
-eval "use Pod::Coverage::TrustPod";
-plan skip_all => "Pod::Coverage::TrustPod required for testing POD coverage"
-  if $@;
+use Test::Pod::Coverage 1.08;
+use Pod::Coverage::TrustPod;
 
 all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' });
@@ -1,14 +1,22 @@
 package Dist::Zilla::Plugin::PodSyntaxTests;
-{
-  $Dist::Zilla::Plugin::PodSyntaxTests::VERSION = '4.300030';
-}
 # ABSTRACT: a release test for Pod syntax
+$Dist::Zilla::Plugin::PodSyntaxTests::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::Plugin::InlineFiles';
 with 'Dist::Zilla::Role::PrereqSource';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This is an extension of L<Dist::Zilla::Plugin::InlineFiles>, providing the
+#pod following files:
+#pod
+#pod   xt/release/pod-syntax.t   - a standard Test::Pod test
+#pod
+#pod L<Test::Pod> C<1.41> will be added as a C<develop requires> dependency.
+#pod
+#pod =cut
 
 
 # Register the release test prereq as a "develop requires"
@@ -31,13 +39,15 @@ __PACKAGE__->meta->make_immutable;
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::PodSyntaxTests - a release test for Pod syntax
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -54,7 +64,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -64,9 +74,8 @@ the same terms as the Perl 5 programming language system itself.
 __DATA__
 ___[ xt/release/pod-syntax.t ]___
 #!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
 use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+use Test::Pod 1.41;
 
 all_pod_files_ok();
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::PodVersion;
-{
-  $Dist::Zilla::Plugin::PodVersion::VERSION = '4.300030';
-}
 # ABSTRACT: add a VERSION head1 to each Perl document
+$Dist::Zilla::Plugin::PodVersion::VERSION = '5.019';
 use Moose;
 with(
   'Dist::Zilla::Role::FileMunger',
@@ -13,6 +11,14 @@ with(
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a C<=head1 VERSION> section to most perl files in the
+#pod distribution, indicating the version of the dist being built.  This section is
+#pod added after C<=head1 NAME>.  If there is no such section, the version section
+#pod will not be added.
+#pod
+#pod =cut
 
 sub munge_files {
   my ($self) = @_;
@@ -43,7 +49,7 @@ sub munge_pod {
     $_++; # move past the =head1 line itself
     $_++ while $content[$_] =~ /^\s*$/;
 
-    $_++; # move past the line with the abstract
+    $_++ while $content[$_] !~ /^\s*$/; # move past the abstract
     $_++ while $content[$_] =~ /^\s*$/;
 
     splice @content, $_ - 1, 0, (
@@ -70,17 +76,28 @@ sub munge_pod {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<PkgVersion|Dist::Zilla::Plugin::PkgVersion>,
+#pod L<AutoVersion|Dist::Zilla::Plugin::AutoVersion>,
+#pod L<NextRelease|Dist::Zilla::Plugin::NextRelease>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::PodVersion - add a VERSION head1 to each Perl document
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -102,7 +119,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,21 @@
 package Dist::Zilla::Plugin::Prereq;
-{
-  $Dist::Zilla::Plugin::Prereq::VERSION = '4.300030';
-}
 # ABSTRACT: (DEPRECATED) the old name of the Prereqs plugin
+$Dist::Zilla::Plugin::Prereq::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::Plugin::Prereqs';
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod This plugin extends C<[Prereqs]> and adds nothing.  It is the old name for
+#pod Prereqs, and will be removed in a few versions.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla plugins: L<Prereqs|Dist::Zilla::Plugin::Prereqs>.
+#pod
+#pod =cut
 
 before register_component => sub {
   die "[Prereq] is incompatible with Dist::Zilla >= v5; replace it with [Prereqs] (note the
@@ -23,13 +31,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::Prereq - (DEPRECATED) the old name of the Prereqs plugin
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -46,7 +56,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,88 @@
 package Dist::Zilla::Plugin::Prereqs;
-{
-  $Dist::Zilla::Plugin::Prereqs::VERSION = '4.300030';
-}
 # ABSTRACT: list simple prerequisites
+$Dist::Zilla::Plugin::Prereqs::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::PrereqSource';
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [Prereqs]
+#pod   Foo::Bar = 1.002
+#pod   MRO::Compat = 10
+#pod   Sub::Exporter = 0
+#pod
+#pod You can specify requirements for different phases and relationships with:
+#pod
+#pod   [Prereqs]
+#pod   -phase = test
+#pod   -relationship = recommends
+#pod
+#pod   Fitz::Fotz    = 1.23
+#pod   Text::SoundEx = 3
+#pod
+#pod Remember that if you load two Prereqs plugins, each will needs its own name,
+#pod added like this:
+#pod
+#pod   [Prereqs / PluginName]
+#pod   -phase = test
+#pod   -relationship = recommends
+#pod
+#pod   Fitz::Fotz    = 1.23
+#pod   Text::SoundEx = 3
+#pod
+#pod If the name is the CamelCase concatenation of a phase and relationship
+#pod (or just a relationship), it will set those parameters implicitly.  If
+#pod you use a custom name, but it does not specify the relationship, and
+#pod you didn't specify either C<-phase> or C<-relationship>, it throws the
+#pod error C<No -phase or -relationship specified>.  This is to prevent a
+#pod typo that makes the name meaningless from slipping by unnoticed.
+#pod
+#pod The example below is equivalent to the example above, except for the name of
+#pod the resulting plugin:
+#pod
+#pod   [Prereqs / TestRecommends]
+#pod   Fitz::Fotz    = 1.23
+#pod   Text::SoundEx = 3
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This module adds "fixed" prerequisites to your distribution.  These are prereqs
+#pod with a known, fixed minimum version that doesn't change based on platform or
+#pod other conditions.
+#pod
+#pod You can specify prerequisites for different phases and kinds of relationships.
+#pod In C<RuntimeRequires>, the phase is Runtime and the relationship is Requires.
+#pod These are described in more detail in the L<CPAN::Meta
+#pod specification|CPAN::Meta::Spec/PREREQUISITES>.
+#pod
+#pod The phases are:
+#pod
+#pod =for :list
+#pod * configure
+#pod * build
+#pod * test
+#pod * runtime
+#pod * develop
+#pod
+#pod The relationship types are:
+#pod
+#pod =for :list
+#pod * requires
+#pod * recommends
+#pod * suggests
+#pod * conflicts
+#pod
+#pod If the phase is omitted, it will default to I<runtime>; thus, specifying
+#pod "Prereqs / Recommends" in your dist.ini is equivalent to I<RuntimeRecommends>.
+#pod
+#pod Not all of these phases are useful for all tools, especially tools that only
+#pod understand version 1.x CPAN::Meta files.
+#pod
+#pod =cut
 
 has prereq_phase => (
   is   => 'ro',
@@ -107,17 +182,37 @@ sub register_prereqs {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<AutoPrereqs|Dist::Zilla::Plugin::AutoPrereqs>.
+#pod
+#pod =item *
+#pod
+#pod The CPAN Meta specification: L<CPAN::Meta/PREREQUISITES>.
+#pod
+#pod =back
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::Prereqs - list simple prerequisites
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -164,7 +259,7 @@ the resulting plugin:
 =head1 DESCRIPTION
 
 This module adds "fixed" prerequisites to your distribution.  These are prereqs
-with a known, fixed minimum version that doens't change based on platform or
+with a known, fixed minimum version that doesn't change based on platform or
 other conditions.
 
 You can specify prerequisites for different phases and kinds of relationships.
@@ -248,7 +343,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::PruneCruft;
-{
-  $Dist::Zilla::Plugin::PruneCruft::VERSION = '4.300030';
-}
 # ABSTRACT: prune stuff that you probably don't mean to include
+$Dist::Zilla::Plugin::PruneCruft::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 use Moose::Util::TypeConstraints;
@@ -10,6 +8,34 @@ with 'Dist::Zilla::Role::FilePruner';
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod This plugin tries to compensate for the stupid crap that turns up in your
+#pod working copy, removing it before it gets into your dist and screws everything
+#pod up.
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [PruneCruft]
+#pod
+#pod If you would like to exclude certain exclusions, use the C<except> option (it
+#pod can be specified multiple times):
+#pod
+#pod   [PruneCruft]
+#pod   except = \.gitignore
+#pod   except = t/.*/\.keep$
+#pod
+#pod This plugin is included in the L<@Basic|Dist::Zilla::PluginBundle::Basic>
+#pod bundle.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<PruneFiles|Dist::Zilla::Plugin::PruneFiles>,
+#pod L<ManifestSkip|Dist::Zilla::Plugin::ManifestSkip>.
+#pod
+#pod =cut
 
 {
   my $type = subtype as 'ArrayRef[RegexpRef]';
@@ -38,12 +64,16 @@ sub exclude_file {
   return 1 if index($file->name, $self->zilla->name . '-') == 0;
   return 1 if $file->name =~ /\A\./;
   return 1 if $file->name =~ /\A(?:Build|Makefile)\z/;
+  return 1 if $file->name eq 'Makefile.old';
   return 1 if $file->name =~ /\Ablib/;
   return 1 if $file->name =~ /\.(?:o|bs)$/;
   return 1 if $file->name =~ /\A_Inline/;
   return 1 if $file->name eq 'MYMETA.yml';
   return 1 if $file->name eq 'MYMETA.json';
   return 1 if $file->name eq 'pm_to_blib';
+  # Avoid bundling fatlib/ dir created by App::FatPacker
+  # https://github.com/andk/pause/pull/65
+  return 1 if substr($file->name, 0, 7) eq 'fatlib/';
 
   if ((my $file = $file->name) =~ s/\.c$//) {
       for my $other ($self->zilla->files->flatten) {
@@ -75,13 +105,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::PruneCruft - prune stuff that you probably don't mean to include
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -116,7 +148,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,18 +1,41 @@
 package Dist::Zilla::Plugin::PruneFiles;
-{
-  $Dist::Zilla::Plugin::PruneFiles::VERSION = '4.300030';
-}
-# ABSTRACT: prune arbirary files from the dist
+# ABSTRACT: prune arbitrary files from the dist
+$Dist::Zilla::Plugin::PruneFiles::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 with 'Dist::Zilla::Role::FilePruner';
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod This plugin allows you to explicitly prune some files from your
+#pod distribution. You can either specify the exact set of files (with the
+#pod "filenames" parameter) or provide the regular expressions to
+#pod check (using "match").
+#pod
+#pod This is useful if another plugin (maybe a FileGatherer) adds a
+#pod bunch of files, and you only want a subset of them.
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [PruneFiles]
+#pod   filename = xt/release/pod-coverage.t ; pod coverage tests are for jerks
+#pod   filename = todo-list.txt             ; keep our secret plans to ourselves
+#pod
+#pod   match     = ^test_data/
+#pod   match     = ^test.cvs$
+#pod
+#pod =cut
 
 sub mvp_multivalue_args { qw(filenames matches) }
 sub mvp_aliases { return { filename => 'filenames', match => 'matches' } }
 
+#pod =attr filenames
+#pod
+#pod This is an arrayref of filenames to be pruned from the distribution.
+#pod
+#pod =cut
 
 has filenames => (
   is   => 'ro',
@@ -20,6 +43,12 @@ has filenames => (
   default => sub { [] },
 );
 
+#pod =attr matches
+#pod
+#pod This is an arrayref of regular expressions and files matching any of them,
+#pod will be pruned from the distribution.
+#pod
+#pod =cut
 
 has matches => (
   is   => 'ro',
@@ -52,17 +81,28 @@ sub prune_files {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla plugins:
+#pod L<PruneCruft|Dist::Zilla::Plugin::PruneCruft>,
+#pod L<GatherDir|Dist::Zilla::Plugin::GatherDir>,
+#pod L<ManifestSkip|Dist::Zilla::Plugin::ManifestSkip>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
-Dist::Zilla::Plugin::PruneFiles - prune arbirary files from the dist
+Dist::Zilla::Plugin::PruneFiles - prune arbitrary files from the dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -80,7 +120,7 @@ In your F<dist.ini>:
   filename = xt/release/pod-coverage.t ; pod coverage tests are for jerks
   filename = todo-list.txt             ; keep our secret plans to ourselves
 
-  match     = ^test_data/*
+  match     = ^test_data/
   match     = ^test.cvs$
 
 =head1 ATTRIBUTES
@@ -107,7 +147,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,26 @@
 package Dist::Zilla::Plugin::Readme;
-{
-  $Dist::Zilla::Plugin::Readme::VERSION = '4.300030';
-}
 # ABSTRACT: build a README file
+$Dist::Zilla::Plugin::Readme::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
-with qw/Dist::Zilla::Role::FileGatherer Dist::Zilla::Role::TextTemplate/;
+with qw/Dist::Zilla::Role::FileGatherer
+    Dist::Zilla::Role::TextTemplate
+    Dist::Zilla::Role::FileMunger/;
 
+use Moose::Util::TypeConstraints;
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a very simple F<README> file to the distribution, citing the
+#pod dist's name, version, abstract, and license.  It may be more useful or
+#pod informative in the future.
+#pod
+#pod =cut
+
+has _file_obj => (
+  is => 'rw', isa => role_type('Dist::Zilla::Role::File'),
+);
 
 sub gather_files {
   my ($self, $arg) = @_;
@@ -24,19 +36,38 @@ version {{ $dist->version }}:
 
 {{ $dist->license->notice }}
 
+This README file was generated by {{ $generated_by }}.
+
 |;
 
-  my $content = $self->fill_in_string(
-    $template,
-    { dist => \($self->zilla) },
+  $self->add_file(
+    $self->_file_obj(
+      Dist::Zilla::File::InMemory->new(
+        name => 'README',
+        content => $template,
+      )
+    )
   );
 
-  my $file = Dist::Zilla::File::InMemory->new({
-    content => $content,
-    name    => 'README',
-  });
+  return;
+}
+
+sub munge_files {
+  my $self = shift;
+
+  my $file = $self->_file_obj;
+
+  $file->content(
+    $self->fill_in_string(
+      $file->content,
+      {
+        dist => \($self->zilla),
+        generated_by => \sprintf("%s v%s",
+                          ref($self), $self->VERSION || '(dev)'),
+      }
+    )
+  );
 
-  $self->add_file($file);
   return;
 }
 
@@ -47,13 +78,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::Readme - build a README file
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -67,7 +100,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Plugin::RemovePrereqs;
-{
-  $Dist::Zilla::Plugin::RemovePrereqs::VERSION = '4.300030';
-}
 # ABSTRACT: a plugin to remove gathered prereqs
+$Dist::Zilla::Plugin::RemovePrereqs::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::PrereqSource';
 
@@ -13,6 +11,24 @@ use Moose::Autobox;
 use MooseX::Types::Moose qw(ArrayRef);
 use MooseX::Types::Perl  qw(ModuleName);
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [RemovePrereqs]
+#pod   remove = Foo::Bar
+#pod   remove = MRO::Compat
+#pod
+#pod This will remove any prerequisite of any type from any prereq phase.  This is
+#pod useful for eliminating incorrectly detected prereqs.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla plugins:
+#pod L<Prereqs|Dist::Zilla::Plugin::Prereqs>,
+#pod L<AutoPrereqs|Dist::Zilla::Plugin::AutoPrereqs>.
+#pod
+#pod =cut
 
 sub mvp_multivalue_args { qw(modules_to_remove) }
 
@@ -63,13 +79,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::RemovePrereqs - a plugin to remove gathered prereqs
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -94,7 +112,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,22 @@
 package Dist::Zilla::Plugin::ShareDir;
-{
-  $Dist::Zilla::Plugin::ShareDir::VERSION = '4.300030';
-}
 # ABSTRACT: install a directory's contents as "ShareDir" content
+$Dist::Zilla::Plugin::ShareDir::VERSION = '5.019';
 use Moose;
 
 use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [ShareDir]
+#pod   dir = share
+#pod
+#pod   If no C<dir> is provided, the default is F<share>.
+#pod
+#pod =cut
 
 has dir => (
   is   => 'ro',
@@ -39,13 +47,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::ShareDir - install a directory's contents as "ShareDir" content
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -62,7 +72,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,21 +1,63 @@
 package Dist::Zilla::Plugin::TemplateModule;
-{
-  $Dist::Zilla::Plugin::TemplateModule::VERSION = '4.300030';
-}
 # ABSTRACT: a simple module-from-template plugin
+$Dist::Zilla::Plugin::TemplateModule::VERSION = '5.019';
 use Moose;
 with qw(Dist::Zilla::Role::ModuleMaker Dist::Zilla::Role::TextTemplate);
 
+use Path::Tiny;
+
 use namespace::autoclean;
 
 use autodie;
 
 use Sub::Exporter::ForMethods;
-use Data::Section 0.004 # fixed header_re
+use Data::Section 0.200002 # encoding and bytes
   { installer => Sub::Exporter::ForMethods::method_installer },
   '-setup';
 use Dist::Zilla::File::InMemory;
 
+#pod =head1 MINTING CONFIGURATION
+#pod
+#pod This module is part of the standard configuration of the default L<Dist::Zilla>
+#pod Minting Profile, and all profiles that don't set a custom ':DefaultModuleMaker'
+#pod so you don't need to normally do anything to configure it.
+#pod
+#pod   dzil new Some::Module
+#pod   # creates ./Some-Module/*
+#pod   # creates ./Some-Module/lib/Some/Module.pm
+#pod
+#pod However, for those who wish to configure this ( or any subclasses ) this is
+#pod presently required:
+#pod
+#pod   [TemplateModule / :DefaultModuleMaker]
+#pod   ; template  = SomeFile.pm
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a L<ModuleMaker|Dist::Zilla::Role::ModuleMaker> used for creating new
+#pod Perl modules files when minting a new dist with C<dzil new>.  It uses
+#pod L<Text::Template> (via L<Dist::Zilla::Role::TextTemplate>) to render a template
+#pod into a Perl module.  The template is given two variables for use in rendering:
+#pod C<$name>, the module name; and C<$dist>, the Dist::Zilla object.  The module is
+#pod always created as a file under F<./lib>.
+#pod
+#pod By default, the template looks something like this:
+#pod
+#pod   use strict;
+#pod   use warnings;
+#pod   package {{ $name }};
+#pod
+#pod   1;
+#pod
+#pod =attr template
+#pod
+#pod The C<template> parameter may be given to the plugin to provide a different
+#pod filename, absolute or relative to the build/profile directory.
+#pod
+#pod If this parameter is not specified, this module will use the boilerplate module
+#pod template included in this module.
+#pod
+#pod =cut
 
 has template => (
   is  => 'ro',
@@ -29,11 +71,7 @@ sub make_module {
   my $template;
 
   if ($self->has_template) {
-    open my $fh, '<', $self->template;
-
-    # Win32
-    binmode $fh, ':raw';
-    $template = do { local $/; <$fh> };
+    $template = path( $self->template )->slurp_utf8;
   } else {
     $template = ${ $self->section_data('Module.pm') };
   }
@@ -61,13 +99,15 @@ __PACKAGE__->meta->make_immutable;
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::TemplateModule - a simple module-from-template plugin
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -118,7 +158,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,27 @@
 package Dist::Zilla::Plugin::TestRelease;
-{
-  $Dist::Zilla::Plugin::TestRelease::VERSION = '4.300030';
-}
+# ABSTRACT: extract archive and run tests before releasing the dist
+$Dist::Zilla::Plugin::TestRelease::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::BeforeRelease';
-# ABSTRACT: extract archive and run tests before releasing the dist
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin runs before a release happens.  It will extract the to-be-released
+#pod archive into a temporary directory and use the TestRunner plugins to run its
+#pod tests.  If the tests fail, the release is aborted and the temporary directory
+#pod is left in place.  If the tests pass, the temporary directory is cleaned up and
+#pod the release process continues.
+#pod
+#pod This will set the RELEASE_TESTING and AUTHOR_TESTING env vars while running the
+#pod test suite.
+#pod
+#pod =head1 CREDITS
+#pod
+#pod This plugin was originally contributed by Christopher J. Madsen.
+#pod
+#pod =cut
 
 use File::pushd ();
 use Moose::Autobox;
@@ -52,13 +66,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::TestRelease - extract archive and run tests before releasing the dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -81,7 +97,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,9 @@
 package Dist::Zilla::Plugin::UploadToCPAN;
-{
-  $Dist::Zilla::Plugin::UploadToCPAN::VERSION = '4.300030';
-}
 # ABSTRACT: upload the dist to CPAN
+$Dist::Zilla::Plugin::UploadToCPAN::VERSION = '5.019';
 use Moose;
 with qw(Dist::Zilla::Role::BeforeRelease Dist::Zilla::Role::Releaser);
 
-use CPAN::Uploader 0.101550; # ua string
-use File::HomeDir;
 use File::Spec;
 use Moose::Util::TypeConstraints;
 use Scalar::Util qw(weaken);
@@ -15,11 +11,36 @@ use Try::Tiny;
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod If loaded, this plugin will allow the F<release> command to upload to the CPAN.
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin looks for configuration in your C<dist.ini> or (more
+#pod likely) C<~/.dzil/config.ini>:
+#pod
+#pod   [%PAUSE]
+#pod   username = YOUR-PAUSE-ID
+#pod   password = YOUR-PAUSE-PASSWORD
+#pod
+#pod If this configuration does not exist, it can read the configuration from
+#pod C<~/.pause>, in the same format that L<cpan-upload> requires:
+#pod
+#pod   user YOUR-PAUSE-ID
+#pod   password YOUR-PAUSE-PASSWORD
+#pod
+#pod If neither configuration exists, it will prompt you to enter your
+#pod username and password during the BeforeRelease phase.  Entering a
+#pod blank username or password will abort the release.
+#pod
+#pod =cut
 
 {
   package
     Dist::Zilla::Plugin::UploadToCPAN::_Uploader;
-  use parent 'CPAN::Uploader';
+  # CPAN::Uploader will be loaded later if used
+  our @ISA = 'CPAN::Uploader';
   # Report CPAN::Uploader's version, not ours:
   sub _ua_string { CPAN::Uploader->_ua_string }
 
@@ -54,6 +75,12 @@ sub mvp_aliases {
   return { user => 'username' };
 }
 
+#pod =attr username
+#pod
+#pod This option supplies the user's PAUSE username.  If not supplied, it will be
+#pod looked for in the user's PAUSE configuration.
+#pod
+#pod =cut
 
 has username => (
   is   => 'ro',
@@ -68,6 +95,12 @@ has username => (
   },
 );
 
+#pod =attr password
+#pod
+#pod This option supplies the user's PAUSE password.  If not supplied, it will be
+#pod looked for in the user's PAUSE configuration.
+#pod
+#pod =cut
 
 has password => (
   is   => 'ro',
@@ -82,15 +115,42 @@ has password => (
   },
 );
 
+#pod =attr pause_cfg_file
+#pod
+#pod This is the name of the file containing your pause credentials.  It defaults
+#pod F<.pause>.  If you give a relative path, it is taken to be relative to
+#pod L</pause_cfg_dir>.
+#pod
+#pod =cut
+
 has pause_cfg_file => (
   is      => 'ro',
   isa     => 'Str',
   lazy    => 1,
-  default => sub {
-    File::Spec->catfile(File::HomeDir->my_home, '.pause');
-  },
+  default => sub { '.pause' },
+);
+
+#pod =attr pause_cfg_dir
+#pod
+#pod This is the directory for resolving a relative L</pause_cfg_file>.
+#pod It defaults to C<< File::HomeDir->my_home >>.
+#pod
+#pod =cut
+
+has pause_cfg_dir => (
+  is      => 'ro',
+  isa     => 'Str',
+  lazy    => 1,
+  default => sub { require File::HomeDir; File::HomeDir::->my_home },
 );
 
+#pod =attr pause_cfg
+#pod
+#pod This is a hashref of defaults loaded from F<~/.pause> -- this attribute is
+#pod subject to removal in future versions, as the config-loading behavior in
+#pod CPAN::Uploader is improved.
+#pod
+#pod =cut
 
 has pause_cfg => (
   is      => 'ro',
@@ -98,20 +158,25 @@ has pause_cfg => (
   lazy    => 1,
   default => sub {
     my $self = shift;
-    open my $fh, '<', $self->pause_cfg_file
-      or return {};
-    my %ret;
-    # basically taken from the parsing code used by cpan-upload
-    # (maybe this should be part of the CPAN::Uploader api?)
-    while (<$fh>) {
-      next if /^\s*(?:#.*)?$/;
-      my ($k, $v) = /^\s*(\w+)\s+(.+)$/;
-      $ret{$k} = $v;
-    }
-    return \%ret;
+    require CPAN::Uploader;
+    my $file = $self->pause_cfg_file;
+    $file = File::Spec->catfile($self->pause_cfg_dir, $file)
+      unless File::Spec->file_name_is_absolute($file);
+    my $cfg = try {
+      CPAN::Uploader->read_config_file($file)
+    } catch {
+      {};
+    };
+    return $cfg;
   },
 );
 
+#pod =attr subdir
+#pod
+#pod If given, this specifies a subdirectory under the user's home directory to
+#pod which to upload.  Using this option is not recommended.
+#pod
+#pod =cut
 
 has subdir => (
     is        => 'ro',
@@ -119,6 +184,13 @@ has subdir => (
     predicate => 'has_subdir',
 );
 
+#pod =attr upload_uri
+#pod
+#pod If given, this specifies an alternate URI for the PAUSE upload form.  By
+#pod default, the default supplied by L<CPAN::Uploader> is used.  Using this option
+#pod is not recommended in most cases.
+#pod
+#pod =cut
 
 has upload_uri => (
   is => 'ro',
@@ -133,6 +205,10 @@ has uploader => (
   default => sub {
     my ($self) = @_;
 
+    # Load the module lazily
+    require CPAN::Uploader;
+    CPAN::Uploader->VERSION('0.103004');  # require HTTPS
+
     my $uploader = Dist::Zilla::Plugin::UploadToCPAN::_Uploader->new({
       user     => $self->username,
       password => $self->password,
@@ -177,13 +253,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Plugin::UploadToCPAN - upload the dist to CPAN
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -220,6 +298,17 @@ looked for in the user's PAUSE configuration.
 This option supplies the user's PAUSE password.  If not supplied, it will be
 looked for in the user's PAUSE configuration.
 
+=head2 pause_cfg_file
+
+This is the name of the file containing your pause credentials.  It defaults
+F<.pause>.  If you give a relative path, it is taken to be relative to
+L</pause_cfg_dir>.
+
+=head2 pause_cfg_dir
+
+This is the directory for resolving a relative L</pause_cfg_file>.
+It defaults to C<< File::HomeDir->my_home >>.
+
 =head2 pause_cfg
 
 This is a hashref of defaults loaded from F<~/.pause> -- this attribute is
@@ -243,7 +332,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::PluginBundle::Basic;
-{
-  $Dist::Zilla::PluginBundle::Basic::VERSION = '4.300030';
-}
 # ABSTRACT: the basic plugins to maintain and release CPAN dists
+$Dist::Zilla::PluginBundle::Basic::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::PluginBundle::Easy';
 
@@ -34,17 +32,53 @@ sub configure {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin is meant to be a basic "first step" bundle for using Dist::Zilla.
+#pod It won't munge any of your code, but will generate a F<Makefile.PL> and allows
+#pod easy, reliable releasing of distributions.
+#pod
+#pod It includes the following plugins with their default configuration:
+#pod
+#pod =for :list
+#pod * L<Dist::Zilla::Plugin::GatherDir>
+#pod * L<Dist::Zilla::Plugin::PruneCruft>
+#pod * L<Dist::Zilla::Plugin::ManifestSkip>
+#pod * L<Dist::Zilla::Plugin::MetaYAML>
+#pod * L<Dist::Zilla::Plugin::License>
+#pod * L<Dist::Zilla::Plugin::Readme>
+#pod * L<Dist::Zilla::Plugin::ExtraTests>
+#pod * L<Dist::Zilla::Plugin::ExecDir>
+#pod * L<Dist::Zilla::Plugin::ShareDir>
+#pod * L<Dist::Zilla::Plugin::MakeMaker>
+#pod * L<Dist::Zilla::Plugin::Manifest>
+#pod * L<Dist::Zilla::Plugin::TestRelease>
+#pod * L<Dist::Zilla::Plugin::ConfirmRelease>
+#pod * L<Dist::Zilla::Plugin::UploadToCPAN>
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins: L<@Filter|Dist::Zilla::PluginBundle::Filter>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<PluginBundle|Dist::Zilla::Role::PluginBundle>,
+#pod L<PluginBundle::Easy|Dist::Zilla::Role::PluginBundle::Easy>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::PluginBundle::Basic - the basic plugins to maintain and release CPAN dists
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -128,7 +162,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::PluginBundle::Classic;
-{
-  $Dist::Zilla::PluginBundle::Classic::VERSION = '4.300030';
-}
 # ABSTRACT: the classic (old) default configuration for Dist::Zilla
+$Dist::Zilla::PluginBundle::Classic::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::PluginBundle::Easy';
 
@@ -37,17 +35,55 @@ sub configure {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This bundle is more or less the original configuration bundled with
+#pod Dist::Zilla.  More than likely, you'd rather be using
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic> or a more complex bundle.  This one
+#pod will muck around with your code by adding C<$VERSION> declarations and will
+#pod mess with you Pod by adding a C<=head1 VERSION> section, but it won't get you a
+#pod lot of more useful features like autoversioning, autoprereqs, or Pod::Weaver.
+#pod
+#pod It includes the following plugins with their default configuration:
+#pod
+#pod =for :list
+#pod * L<Dist::Zilla::Plugin::GatherDir>
+#pod * L<Dist::Zilla::Plugin::PruneCruft>
+#pod * L<Dist::Zilla::Plugin::ManifestSkip>
+#pod * L<Dist::Zilla::Plugin::MetaYAML>
+#pod * L<Dist::Zilla::Plugin::License>
+#pod * L<Dist::Zilla::Plugin::Readme>
+#pod * L<Dist::Zilla::Plugin::PkgVersion>
+#pod * L<Dist::Zilla::Plugin::PodVersion>
+#pod * L<Dist::Zilla::Plugin::PodCoverageTests>
+#pod * L<Dist::Zilla::Plugin::PodSyntaxTests>
+#pod * L<Dist::Zilla::Plugin::ExtraTests>
+#pod * L<Dist::Zilla::Plugin::ExecDir>
+#pod * L<Dist::Zilla::Plugin::ShareDir>
+#pod * L<Dist::Zilla::Plugin::MakeMaker>
+#pod * L<Dist::Zilla::Plugin::Manifest>
+#pod * L<Dist::Zilla::Plugin::ConfirmRelease>
+#pod * L<Dist::Zilla::Plugin::UploadToCPAN>
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::PluginBundle::Classic - the classic (old) default configuration for Dist::Zilla
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -142,7 +178,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::PluginBundle::FakeClassic;
-{
-  $Dist::Zilla::PluginBundle::FakeClassic::VERSION = '4.300030';
-}
 # ABSTRACT: build something more or less like a "classic" CPAN dist
+$Dist::Zilla::PluginBundle::FakeClassic::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::PluginBundle::Classic';
 
@@ -36,13 +34,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::PluginBundle::FakeClassic - build something more or less like a "classic" CPAN dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -50,7 +50,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,16 +1,40 @@
 package Dist::Zilla::PluginBundle::Filter;
-{
-  $Dist::Zilla::PluginBundle::Filter::VERSION = '4.300030';
-}
 # ABSTRACT: use another bundle, with some plugins removed
+$Dist::Zilla::PluginBundle::Filter::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 with 'Dist::Zilla::Role::PluginBundle';
 
 use namespace::autoclean;
 
+use Class::Load qw(try_load_class);
 use Dist::Zilla::Util;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod   [@Filter]
+#pod   -bundle = @Basic
+#pod   -remove = ShareDir
+#pod   -remove = UploadToCPAN
+#pod   option = for_basic
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin bundle actually wraps and modifies another plugin bundle.  It
+#pod includes all the configuration for the bundle named in the C<-bundle> attribute,
+#pod but removes all the entries whose package is given in the C<-remove> attributes.
+#pod
+#pod Options not prefixed with C<-> will be passed to the bundle to be filtered.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins: L<@Basic|Dist::Zilla::PluginBundle::Basic>.
+#pod
+#pod Dist::Zilla roles: L<PluginBundle|Dist::Zilla::Role::PluginBundle>.
+#pod
+#pod =cut
 
 sub mvp_multivalue_args { qw(remove -remove) }
 
@@ -33,18 +57,21 @@ sub bundle_config {
   Carp::croak("no bundle given for bundle filter")
     unless my $bundle = $config->{filter}->{bundle};
 
-  $bundle = Dist::Zilla::Util->expand_config_package_name($bundle);
+  my $pkg = Dist::Zilla::Util->expand_config_package_name($bundle);
 
   my $load_opts = {};
   if( my $v = $config->{filter}->{version} ){
     $load_opts->{'-version'} = $v;
   }
 
-  Class::MOP::load_class($bundle, $load_opts);
+  unless (try_load_class($pkg, $load_opts)) {
+    # XXX Naughty! -- rjbs, 2013-07-23
+    Config::MVP::Section->missing_package($pkg, $bundle);
+  }
 
-  my @plugins = $bundle->bundle_config({
+  my @plugins = $pkg->bundle_config({
     name    => $section->{name}, # not 100% sure about this -- rjbs, 2010-03-06
-    package => $bundle,
+    package => $pkg,
     payload => $config->{bundle} || {},
   });
 
@@ -67,13 +94,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::PluginBundle::Filter - use another bundle, with some plugins removed
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -105,7 +134,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,20 +1,39 @@
 package Dist::Zilla::Prereqs;
-{
-  $Dist::Zilla::Prereqs::VERSION = '4.300030';
-}
 # ABSTRACT: the prerequisites of a Dist::Zilla distribution
+$Dist::Zilla::Prereqs::VERSION = '5.019';
 use Moose;
 use Moose::Autobox;
 use MooseX::Types::Moose qw(Bool HashRef);
 
 use CPAN::Meta::Prereqs 2.120630; # add_string_requirement
-use Hash::Merge::Simple ();
 use Path::Class ();
 use String::RewritePrefix;
 use CPAN::Meta::Requirements 2.121; # requirements_for_module
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Dist::Zilla::Prereqs is a subcomponent of Dist::Zilla.  The C<prereqs>
+#pod attribute on your Dist::Zilla object is a Dist::Zilla::Prereqs object, and is
+#pod responsible for keeping track of the distribution's prerequisites.
+#pod
+#pod In fact, a Dist::Zilla::Prereqs object is just a thin layer over a
+#pod L<CPAN::Meta::Prereqs> object, stored in the C<cpan_meta_prereqs> attribute.
+#pod
+#pod Almost everything this object does is proxied to the CPAN::Meta::Prereqs
+#pod object, so you should really read how I<that> works.
+#pod
+#pod Dist::Zilla::Prereqs proxies the following methods to the CPAN::Meta::Prereqs
+#pod object:
+#pod
+#pod =for :list
+#pod * finalize
+#pod * is_finalized
+#pod * requirements_for
+#pod * as_string_hash
+#pod
+#pod =cut
 
 has cpan_meta_prereqs => (
   is  => 'ro',
@@ -29,6 +48,35 @@ has cpan_meta_prereqs => (
   ) ],
 );
 
+# storing this is sort of gross, but MakeMaker winds up needing the same data
+# anyway. -- xdg, 2013-10-22
+has merged_requires => (
+  is => 'ro',
+  isa => 'CPAN::Meta::Requirements',
+  init_arg => undef,
+  default => sub { CPAN::Meta::Requirements->new },
+);
+
+#pod =method register_prereqs
+#pod
+#pod   $prereqs->register_prereqs(%prereqs);
+#pod
+#pod   $prereqs->register_prereqs(\%arg, %prereqs);
+#pod
+#pod This method adds new minimums to the prereqs object.  If a hashref is the first
+#pod arg, it may have entries for C<phase> and C<type> to indicate what kind of
+#pod prereqs are being registered.  (For more information on phase and type, see
+#pod L<CPAN::Meta::Spec>.)  For example, you might say:
+#pod
+#pod   $prereqs->register_prereqs(
+#pod     { phase => 'test', type => 'recommends' },
+#pod     'Test::Foo' => '1.23',
+#pod     'XML::YZZY' => '2.01',
+#pod   );
+#pod
+#pod If not given, phase and type default to runtime and requires, respectively.
+#pod
+#pod =cut
 
 sub register_prereqs {
   my $self = shift;
@@ -47,6 +95,38 @@ sub register_prereqs {
   return;
 }
 
+before 'finalize' => sub {
+  my ($self) = @_;
+  $self->sync_runtime_build_test_requires;
+};
+
+
+# this avoids a long-standing CPAN.pm bug that incorrectly merges runtime and
+# "build" (build+test) requirements by ensuring requirements stay unified
+# across all three phases
+sub sync_runtime_build_test_requires {
+  my $self = shift;
+
+  # first pass: generated merged requirements
+  for my $phase ( qw/runtime build test/ ) {
+    my $req = $self->requirements_for($phase, 'requires');
+    $self->merged_requires->add_requirements( $req );
+  };
+
+  # second pass: update from merged requirements
+  for my $phase ( qw/runtime build test/ ) {
+    my $req = $self->requirements_for($phase, 'requires');
+    for my $mod ( $req->required_modules ) {
+      $req->clear_requirement( $mod );
+      $req->add_string_requirement(
+        $mod => $self->merged_requires->requirements_for_module($mod)
+      );
+    }
+  }
+
+  return;
+}
+
 __PACKAGE__->meta->make_immutable;
 1;
 
@@ -54,13 +134,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Prereqs - the prerequisites of a Dist::Zilla distribution
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -124,7 +206,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,20 @@
 package Dist::Zilla::Role::AfterBuild;
-{
-  $Dist::Zilla::Role::AfterBuild::VERSION = '4.300030';
-}
 # ABSTRACT: something that runs after building is mostly complete
+$Dist::Zilla::Role::AfterBuild::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<after_build> method called once all
+#pod the files have been written out.  It is passed a hashref with the following
+#pod data:
+#pod
+#pod   build_root - the directory in which the dist was built
+#pod
+#pod =cut
 
 requires 'after_build';
 
@@ -17,13 +24,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::AfterBuild - something that runs after building is mostly complete
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -39,7 +48,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,20 @@
 package Dist::Zilla::Role::AfterMint;
-{
-  $Dist::Zilla::Role::AfterMint::VERSION = '4.300030';
-}
 # ABSTRACT: something that runs after minting is mostly complete
+$Dist::Zilla::Role::AfterMint::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<after_mint> method called once all
+#pod the files have been written out.  It is passed a hashref with the following
+#pod data:
+#pod
+#pod   mint_root - the directory in which the dist was minted
+#pod
+#pod =cut
 
 requires 'after_mint';
 
@@ -17,13 +24,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::AfterMint - something that runs after minting is mostly complete
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -39,7 +48,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
 package Dist::Zilla::Role::AfterRelease;
-{
-  $Dist::Zilla::Role::AfterRelease::VERSION = '4.300030';
-}
 # ABSTRACT: something that runs after release is mostly complete
+$Dist::Zilla::Role::AfterRelease::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<after_release> method called
+#pod once the release is done.
+#pod
+#pod =cut
 
 requires 'after_release';
 
@@ -17,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::AfterRelease - something that runs after release is mostly complete
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
 package Dist::Zilla::Role::BeforeArchive;
-{
-  $Dist::Zilla::Role::BeforeArchive::VERSION = '4.300030';
-}
 # ABSTRACT: something that runs before the archive file is built
+$Dist::Zilla::Role::BeforeArchive::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<before_archive> method
+#pod called before the archive is actually built.
+#pod
+#pod =cut
 
 requires 'before_archive';
 
@@ -17,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::BeforeArchive - something that runs before the archive file is built
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
 package Dist::Zilla::Role::BeforeBuild;
-{
-  $Dist::Zilla::Role::BeforeBuild::VERSION = '4.300030';
-}
 # ABSTRACT: something that runs before building really begins
+$Dist::Zilla::Role::BeforeBuild::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<before_build> method called
+#pod before any other plugins are consulted.
+#pod
+#pod =cut
 
 requires 'before_build';
 
@@ -17,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::BeforeBuild - something that runs before building really begins
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
 package Dist::Zilla::Role::BeforeMint;
-{
-  $Dist::Zilla::Role::BeforeMint::VERSION = '4.300030';
-}
 # ABSTRACT: something that runs before minting really begins
+$Dist::Zilla::Role::BeforeMint::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<before_mint> method called
+#pod before any other plugins are consulted.
+#pod
+#pod =cut
 
 requires 'before_mint';
 
@@ -17,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::BeforeMint - something that runs before minting really begins
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
 package Dist::Zilla::Role::BeforeRelease;
-{
-  $Dist::Zilla::Role::BeforeRelease::VERSION = '4.300030';
-}
 # ABSTRACT: something that runs before release really begins
+$Dist::Zilla::Role::BeforeRelease::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<before_release> method
+#pod called before the release is actually done.
+#pod
+#pod =cut
 
 requires 'before_release';
 
@@ -17,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::BeforeRelease - something that runs before release really begins
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,7 +1,6 @@
 package Dist::Zilla::Role::BuildPL;
-{
-  $Dist::Zilla::Role::BuildPL::VERSION = '4.300030';
-}
+# ABSTRACT: Common ground for Build.PL based builders
+$Dist::Zilla::Role::BuildPL::VERSION = '5.019';
 use Moose::Role;
 
 with qw(
@@ -12,9 +11,21 @@ with qw(
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This role is a helper for Build.PL based installers. It implements the
+#pod L<Dist::Zilla::Plugin::BuildRunner> and L<Dist::Zilla::Plugin::TestRunner>
+#pod roles, and requires you to implement the L<Dist::Zilla::Plugin::PrereqSource>
+#pod and L<Dist::Zilla::Plugin::InstallTool> roles yourself.
+#pod
+#pod =cut
+
 sub build {
   my $self = shift;
 
+  return
+    if -e 'Build' and (stat 'Build.PL')[9] <= (stat 'Build')[9];
+
   system $^X, 'Build.PL' and die "error with Build.PL\n";
   system $^X, 'Build'    and die "error running $^X Build\n";
 
@@ -22,9 +33,17 @@ sub build {
 }
 
 sub test {
-  my ($self, $target) = @_;
+  my ($self, $target, $arg) = @_;
 
   $self->build;
+
+  my $job_count = $arg && exists $arg->{jobs}
+                ? $arg->{jobs}
+                : $self->default_jobs;
+  my $jobs = "j$job_count";
+  my $ho = "HARNESS_OPTIONS";
+  local $ENV{$ho} = $ENV{$ho} ? "$ENV{$ho}:$jobs" : $jobs;
+
   my @testing = $self->zilla->logger->get_debug ? '--verbose' : ();
   system $^X, 'Build', 'test', @testing and die "error running $^X Build test\n";
 
@@ -33,23 +52,26 @@ sub test {
 
 1;
 
-# ABSTRACT: Common ground for Build.PL based builders
-
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::BuildPL - Common ground for Build.PL based builders
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
-This role is a helper for Build.PL based installers. It implements the L<Dist::Zilla::Plugin::BuildRunner> and L<Dist::Zilla::Plugin::TestRunner> roles, and requires you to implement the L<Dist::Zilla::Plugin::PrereqSource> and L<Dist::Zilla::Plugin::InstallTool> roles yourself.
+This role is a helper for Build.PL based installers. It implements the
+L<Dist::Zilla::Plugin::BuildRunner> and L<Dist::Zilla::Plugin::TestRunner>
+roles, and requires you to implement the L<Dist::Zilla::Plugin::PrereqSource>
+and L<Dist::Zilla::Plugin::InstallTool> roles yourself.
 
 =head1 AUTHOR
 
@@ -57,7 +79,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,23 @@
 package Dist::Zilla::Role::BuildRunner;
-{
-  $Dist::Zilla::Role::BuildRunner::VERSION = '4.300030';
-}
 # ABSTRACT: something used as a delegating agent during 'dzil run'
+$Dist::Zilla::Role::BuildRunner::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<build> method called during
+#pod C<dzil run>.  It's passed the root directory of the build test dir.
+#pod
+#pod =head1 REQUIRED METHODS
+#pod
+#pod =head2 build
+#pod
+#pod This method will throw an exception on failure.
+#pod
+#pod =cut
 
 requires 'build';
 
@@ -17,13 +27,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::BuildRunner - something used as a delegating agent during 'dzil run'
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -42,7 +54,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::Chrome;
-{
-  $Dist::Zilla::Role::Chrome::VERSION = '4.300030';
-}
 # ABSTRACT: something that provides a user interface for Dist::Zilla
+$Dist::Zilla::Role::Chrome::VERSION = '5.019';
 use Moose::Role;
 
 use namespace::autoclean;
@@ -19,13 +17,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::Chrome - something that provides a user interface for Dist::Zilla
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -33,7 +33,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::ConfigDumper;
-{
-  $Dist::Zilla::Role::ConfigDumper::VERSION = '4.300030';
-}
-# ABSTRACT: something that can dump its (public, simplified) configuraiton
+# ABSTRACT: something that can dump its (public, simplified) configuration
+$Dist::Zilla::Role::ConfigDumper::VERSION = '5.019';
 use Moose::Role;
 
 use namespace::autoclean;
@@ -15,13 +13,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
-Dist::Zilla::Role::ConfigDumper - something that can dump its (public, simplified) configuraiton
+Dist::Zilla::Role::ConfigDumper - something that can dump its (public, simplified) configuration
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -29,7 +29,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,54 @@
+package Dist::Zilla::Role::EncodingProvider;
+# ABSTRACT: something that sets a files' encoding
+$Dist::Zilla::Role::EncodingProvider::VERSION = '5.019';
+use Moose::Role;
+with 'Dist::Zilla::Role::Plugin';
+
+use namespace::autoclean;
+
+#pod =head1 DESCRIPTION
+#pod
+#pod EncodingProvider plugins do their work after files are gathered, but before
+#pod they're munged.  They're meant to set the C<encoding> on files.
+#pod
+#pod The method C<set_file_encodings> is called with no arguments.
+#pod
+#pod =cut
+
+requires 'set_file_encodings';
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Role::EncodingProvider - something that sets a files' encoding
+
+=head1 VERSION
+
+version 5.019
+
+=head1 DESCRIPTION
+
+EncodingProvider plugins do their work after files are gathered, but before
+they're munged.  They're meant to set the C<encoding> on files.
+
+The method C<set_file_encodings> is called with no arguments.
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::ExecFiles;
-{
-  $Dist::Zilla::Role::ExecFiles::VERSION = '4.300030';
-}
 # ABSTRACT: something that finds files to install as executables
+$Dist::Zilla::Role::ExecFiles::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::FileFinder';
 
@@ -23,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::ExecFiles - something that finds files to install as executables
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -37,7 +37,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,24 @@
 package Dist::Zilla::Role::File;
-{
-  $Dist::Zilla::Role::File::VERSION = '4.300030';
-}
 # ABSTRACT: something that can act like a file
+$Dist::Zilla::Role::File::VERSION = '5.019';
 use Moose::Role;
 
 use Moose::Util::TypeConstraints;
+use Try::Tiny;
 
 use namespace::autoclean;
 
+with 'Dist::Zilla::Role::StubBuild';
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This role describes a file that may be written into the shipped distribution.
+#pod
+#pod =attr name
+#pod
+#pod This is the name of the file to be written out.
+#pod
+#pod =cut
 
 has name => (
   is   => 'rw',
@@ -16,11 +26,26 @@ has name => (
   required => 1,
 );
 
+#pod =attr added_by
+#pod
+#pod This is a string describing when and why the file was added to the
+#pod distribution.  It will generally be set by a plugin implementing the
+#pod L<FileInjector|Dist::Zilla::Role::FileInjector> role.
+#pod
+#pod =cut
 
 has added_by => (
   is => 'ro',
+  writer => '_set_added_by',
+  isa => 'Str',
 );
 
+#pod =attr mode
+#pod
+#pod This is the mode with which the file should be written out.  It's an integer
+#pod with the usual C<chmod> semantics.  It defaults to 0644.
+#pod
+#pod =cut
 
 my $safe_file_mode = subtype(
   as 'Int',
@@ -34,7 +59,59 @@ has mode => (
   default => 0644,
 );
 
+requires 'encoding';
 requires 'content';
+requires 'encoded_content';
+
+#pod =method is_bytes
+#pod
+#pod Returns true if the C<encoding> is bytes.  When true, accessing
+#pod C<content> will be an error.
+#pod
+#pod =cut
+
+sub is_bytes {
+    my ($self) = @_;
+    return $self->encoding eq 'bytes';
+}
+
+sub _encode {
+  my ($self, $text) = @_;
+  my $enc = $self->encoding;
+  if ( $self->is_bytes ) {
+    return $text; # XXX hope you were right that it really was bytes
+  }
+  else {
+    require Encode;
+    my $bytes =
+      try { Encode::encode($enc, $text, Encode::FB_CROAK()) }
+      catch { $self->_throw("encode $enc" => $_) };
+    return $bytes;
+  }
+}
+
+sub _decode {
+  my ($self, $bytes) = @_;
+  my $enc = $self->encoding;
+  if ( $self->is_bytes ) {
+    $self->_throw(decode => "Can't decode text from 'bytes' encoding");
+  }
+  else {
+    require Encode;
+    my $text =
+      try { Encode::decode($enc, $bytes, Encode::FB_CROAK()) }
+      catch { $self->_throw("decode $enc" => $_) };
+    return $text;
+  }
+}
+
+sub _throw {
+  my ($self, $op, $msg) = @_;
+  my ($name, $added_by) = map {; $self->$_ } qw/name added_by/;
+  confess(
+    "Could not $op $name; $added_by; error was: $msg; maybe you need the [Encoding] plugin to specify an encoding"
+  );
+}
 
 1;
 
@@ -42,13 +119,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::File - something that can act like a file
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -71,13 +150,20 @@ L<FileInjector|Dist::Zilla::Role::FileInjector> role.
 This is the mode with which the file should be written out.  It's an integer
 with the usual C<chmod> semantics.  It defaults to 0644.
 
+=head1 METHODS
+
+=head2 is_bytes
+
+Returns true if the C<encoding> is bytes.  When true, accessing
+C<content> will be an error.
+
 =head1 AUTHOR
 
 Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::FileFinder;
-{
-  $Dist::Zilla::Role::FileFinder::VERSION = '4.300030';
-}
 # ABSTRACT: something that finds files within the distribution
+$Dist::Zilla::Role::FileFinder::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
@@ -10,6 +8,37 @@ use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod A FileFinder plugin locates files within the distribution.  This role exists so
+#pod that sets of files can be easily described in one configuration section and
+#pod then used by one or more other plugin.
+#pod
+#pod Plugins implementing this role must provide a C<find_files> method which will
+#pod be called with no arguments and must return an arrayref of files.  (This
+#pod arrayref should not be re-used, as it may be altered once returned.)
+#pod
+#pod For example, imagine a simple glob-like FileFinder that expects configuration
+#pod like this:
+#pod
+#pod   [Glob / RootModules]
+#pod   glob = *.pm
+#pod
+#pod This sets up a FileFinder named "RootModules" which will contain all F<pm>
+#pod files in the root directory.
+#pod
+#pod Another plugin that knows how to use FileFinder plugins might be configured
+#pod like this:
+#pod
+#pod   [ModuleRelocator]
+#pod   finder = RootModules
+#pod   relocate_to = attic
+#pod
+#pod Finders may operate on any rules they like, checking file size, content, name,
+#pod or other properties.  They should re-perform their "finding" on each call to
+#pod C<find_files> as the files in the distribution may have changed.
+#pod
+#pod =cut
 
 requires 'find_files';
 
@@ -19,13 +48,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::FileFinder - something that finds files within the distribution
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -63,7 +94,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,25 +1,107 @@
 package Dist::Zilla::Role::FileFinderUser;
-{
-  $Dist::Zilla::Role::FileFinderUser::VERSION = '4.300030';
-}
 # ABSTRACT: something that uses FileFinder plugins
+$Dist::Zilla::Role::FileFinderUser::VERSION = '5.019';
 use MooseX::Role::Parameterized;
 
 use namespace::autoclean;
 
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This role enables you to search for files in the dist. This makes it easy to find specific
+#pod files and have the code factored out to common methods.
+#pod
+#pod Here's an example of a finder: ( taken from AutoPrereqs )
+#pod
+#pod   with 'Dist::Zilla::Role::FileFinderUser' => {
+#pod       default_finders  => [ ':InstallModules', ':ExecFiles' ],
+#pod   };
+#pod
+#pod Then you use it in your code like this:
+#pod
+#pod   foreach my $file ( $self->found_files ) {
+#pod     # $file is an object! Look at L<Dist::Zilla::Role::File>
+#pod   }
+#pod
+#pod =cut
+
+#pod =attr finder_arg_names
+#pod
+#pod Define the name of the attribute which will hold this finder. Be sure to specify different names
+#pod if you have multiple finders!
+#pod
+#pod This is an ArrayRef.
+#pod
+#pod Default: [ qw( finder ) ]
+#pod
+#pod =cut
 
 parameter finder_arg_names => (
   isa => 'ArrayRef',
   default => sub { [ 'finder' ] },
 );
 
+#pod =attr default_finders
+#pod
+#pod This attribute is an arrayref of plugin names for the default plugins the
+#pod consuming plugin will use as finders.
+#pod
+#pod Example: C<< [ qw( :InstallModules :ExecFiles ) ] >>
+#pod
+#pod The default finders are:
+#pod
+#pod =begin :list
+#pod
+#pod = :InstallModules
+#pod
+#pod Searches your lib/ directory for pm/pod files
+#pod
+#pod = :IncModules
+#pod
+#pod Searches your inc/ directory for pm files
+#pod
+#pod = :MainModule
+#pod
+#pod Finds the C<main_module> of your dist
+#pod
+#pod = :TestFiles
+#pod
+#pod Searches your t/ directory and lists the files in it.
+#pod
+#pod = :ExecFiles
+#pod
+#pod Searches your distribution for executable files.  Hint: Use the
+#pod L<Dist::Zilla::Plugin::ExecDir> plugin to mark those files as executables.
+#pod
+#pod = :ShareFiles
+#pod
+#pod Searches your ShareDir directory and lists the files in it.
+#pod Hint: Use the L<Dist::Zilla::Plugin::ShareDir> plugin to set up the sharedir.
+#pod
+#pod = :All
+#pod
+#pod Returns all files in the distribution.
+#pod
+#pod = :None
+#pod
+#pod Returns nothing.
+#pod
+#pod =end :list
+#pod
+#pod =cut
 
 parameter default_finders => (
   isa => 'ArrayRef',
   required => 1,
 );
 
+#pod =attr method
+#pod
+#pod This will be the name of the subroutine installed in your package for this
+#pod finder.  Be sure to specify different names if you have multiple finders!
+#pod
+#pod Default: found_files
+#pod
+#pod =cut
 
 parameter method => (
   isa     => 'Str',
@@ -79,13 +161,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::FileFinderUser - something that uses FileFinder plugins
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -118,7 +202,7 @@ Default: [ qw( finder ) ]
 =head2 default_finders
 
 This attribute is an arrayref of plugin names for the default plugins the
-consuming plugin will use as finder.s
+consuming plugin will use as finders.
 
 Example: C<< [ qw( :InstallModules :ExecFiles ) ] >>
 
@@ -150,7 +234,15 @@ L<Dist::Zilla::Plugin::ExecDir> plugin to mark those files as executables.
 =item :ShareFiles
 
 Searches your ShareDir directory and lists the files in it.
-Hint: Use the L<Dist::Zilla::Plugin::ShareDir> plugin to setup the sharedir.
+Hint: Use the L<Dist::Zilla::Plugin::ShareDir> plugin to set up the sharedir.
+
+=item :All
+
+Returns all files in the distribution.
+
+=item :None
+
+Returns nothing.
 
 =back
 
@@ -167,7 +259,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::FileGatherer;
-{
-  $Dist::Zilla::Role::FileGatherer::VERSION = '4.300030';
-}
 # ABSTRACT: something that gathers files into the distribution
+$Dist::Zilla::Role::FileGatherer::VERSION = '5.019';
 use Moose::Role;
 with qw/Dist::Zilla::Role::Plugin Dist::Zilla::Role::FileInjector/;
 
@@ -10,6 +8,17 @@ use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod A FileGatherer plugin is a special sort of
+#pod L<FileInjector|Dist::Zilla::Role::FileInjector> that runs early in the build
+#pod cycle, finding files to include in the distribution.  It is expected to call
+#pod its C<add_file> method to add one or more files to inclusion.
+#pod
+#pod Plugins implementing FileGatherer must provide a C<gather_files> method, which
+#pod will be called during the build process.
+#pod
+#pod =cut
 
 requires 'gather_files';
 
@@ -19,13 +28,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::FileGatherer - something that gathers files into the distribution
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -43,7 +54,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,21 +1,32 @@
 package Dist::Zilla::Role::FileInjector;
-{
-  $Dist::Zilla::Role::FileInjector::VERSION = '4.300030';
-}
 # ABSTRACT: something that can add files to the distribution
+$Dist::Zilla::Role::FileInjector::VERSION = '5.019';
 use Moose::Role;
 
 use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This role should be implemented by any plugin that plans to add files into the
+#pod distribution.  It provides one method (C<L</add_file>>, documented below),
+#pod which adds a file to the distribution, noting the place of addition.
+#pod
+#pod =method add_file
+#pod
+#pod   $plugin->add_file($dzil_file);
+#pod
+#pod This adds a file to the distribution, setting the file's C<added_by> attribute
+#pod as it does so.
+#pod
+#pod =cut
 
 sub add_file {
   my ($self, $file) = @_;
   my ($pkg, undef, $line) = caller;
 
-  $file->meta->get_attribute('added_by')->set_value(
-    $file,
+  $file->_set_added_by(
     sprintf("%s (%s line %s)", $self->plugin_name, $pkg, $line),
   );
 
@@ -29,13 +40,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::FileInjector - something that can add files to the distribution
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -58,7 +71,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::FileMunger;
-{
-  $Dist::Zilla::Role::FileMunger::VERSION = '4.300030';
-}
 # ABSTRACT: something that alters a file's destination or content
+$Dist::Zilla::Role::FileMunger::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
@@ -10,6 +8,22 @@ use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod A FileMunger has an opportunity to mess around with each file that will be
+#pod included in the distribution.  Each FileMunger's C<munge_files> method is
+#pod called once.  By default, this method will just call the C<munge_file> method
+#pod (note the missing terminal 's') once for each file, excluding files with an
+#pod encoding attribute of 'bytes'.
+#pod
+#pod The C<munge_file> method is expected to change attributes about the file before
+#pod it is written out to the built distribution.
+#pod
+#pod If you want to modify all files (including ones with an encoding of 'bytes') or
+#pod want to select a more limited set of files, you can provide your own
+#pod C<munge_files> method.
+#pod
+#pod =cut
 
 sub munge_files {
   my ($self) = @_;
@@ -17,7 +31,14 @@ sub munge_files {
   $self->log_fatal("no munge_file behavior implemented!")
     unless $self->can('munge_file');
 
-  $self->munge_file($_) for $self->zilla->files->flatten;
+  for my $file ($self->zilla->files->flatten) {
+    if ($file->is_bytes) {
+      $self->log_debug($file->name . " has 'bytes' encoding, skipping...");
+      next;
+    }
+
+    $self->munge_file($file);
+  }
 }
 
 1;
@@ -26,23 +47,30 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::FileMunger - something that alters a file's destination or content
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
 A FileMunger has an opportunity to mess around with each file that will be
 included in the distribution.  Each FileMunger's C<munge_files> method is
-called once.  By default, this method will just call the C<munge_file> (note
-the missing terminal 's') once for each file.
+called once.  By default, this method will just call the C<munge_file> method
+(note the missing terminal 's') once for each file, excluding files with an
+encoding attribute of 'bytes'.
+
+The C<munge_file> method is expected to change attributes about the file before
+it is written out to the built distribution.
 
-This method is expected to change attributes about the file before it is
-written out to the built distribution.
+If you want to modify all files (including ones with an encoding of 'bytes') or
+want to select a more limited set of files, you can provide your own
+C<munge_files> method.
 
 =head1 AUTHOR
 
@@ -50,7 +78,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,19 @@
 package Dist::Zilla::Role::FilePruner;
-{
-  $Dist::Zilla::Role::FilePruner::VERSION = '4.300030';
-}
 # ABSTRACT: something that removes found files from the distribution
+$Dist::Zilla::Role::FilePruner::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing FilePruner have their C<prune_files> method called once
+#pod all the L<FileGatherer|Dist::Zilla::Role::FileGatherer> plugins have been
+#pod called.  They are expected to (optionally) remove files from the list of files
+#pod to be included in the distribution.
+#pod
+#pod =cut
 
 requires 'prune_files';
 
@@ -17,13 +23,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::FilePruner - something that removes found files from the distribution
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -38,7 +46,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::InstallTool;
-{
-  $Dist::Zilla::Role::InstallTool::VERSION = '4.300030';
-}
 # ABSTRACT: something that creates an install program for a dist
+$Dist::Zilla::Role::InstallTool::VERSION = '5.019';
 use Moose::Role;
 with qw(
   Dist::Zilla::Role::Plugin
@@ -13,6 +11,16 @@ use namespace::autoclean;
 
 use Moose::Autobox;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing InstallTool have their C<setup_installer> method called to
+#pod inject files after all other file injection and munging has taken place.
+#pod They're expected to produce files needed to make the distribution
+#pod installable, like F<Makefile.PL> or F<Build.PL> and add them with the
+#pod C<add_file> method provided by L<Dist::Zilla::Role::FileInjector>, which is
+#pod also composed by this role.
+#pod
+#pod =cut
 
 requires 'setup_installer';
 
@@ -22,13 +30,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::InstallTool - something that creates an install program for a dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -45,7 +55,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,29 @@
 package Dist::Zilla::Role::LicenseProvider;
-{
-  $Dist::Zilla::Role::LicenseProvider::VERSION = '4.300030';
-}
 # ABSTRACT: something that provides a license for the dist
+$Dist::Zilla::Role::LicenseProvider::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role must provide a C<provide_license> method that
+#pod will be called when setting the dist's license.
+#pod
+#pod If a LicenseProvider offers a license but one has already been set, an
+#pod exception will be raised.  If C<provides_license> returns undef, it will be
+#pod ignored.
+#pod
+#pod =head1 REQUIRED METHODS
+#pod
+#pod =head2 C<< provide_license($copyright_holder, $copyright_year) >>
+#pod
+#pod Generate license object. Returned object should be an instance of
+#pod L<Software::License>.
+#pod
+#pod Plugins are responsible for injecting C<$copyright_holder> and
+#pod C<$copyright_year> arguments into the license if these arguments are defined.
+#pod
+#pod =cut
 
 requires 'provide_license';
 
@@ -16,13 +34,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::LicenseProvider - something that provides a license for the dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -49,7 +69,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,29 +1,38 @@
 package Dist::Zilla::Role::MetaProvider;
-{
-  $Dist::Zilla::Role::MetaProvider::VERSION = '4.300030';
-}
 # ABSTRACT: something that provides metadata (for META.yml/json)
+$Dist::Zilla::Role::MetaProvider::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This role provides data to merge into the distribution metadata.
+#pod
+#pod =method metadata
+#pod
+#pod This method (which must be provided by classes implementing this role)
+#pod returns a hashref of data to be (deeply) merged together with pre-existing
+#pod metadata.
+#pod
+#pod =cut
 
 requires 'metadata';
 
 1;
 
-__END__
-
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::MetaProvider - something that provides metadata (for META.yml/json)
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -52,9 +61,22 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
 
 =cut
+
+__END__
+
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins implementing this role:
+#pod L<ConfigMeta|Dist::Zilla::Plugin::ConfigMeta>.
+#pod L<MetaNoIndex|Dist::Zilla::Plugin::MetaNoIndex>.
+#pod
+#pod Dist::Zilla plugins on the CPAN:
+#pod L<GithubMeta|Dist::Zilla::Plugin::GithubMeta>...
+#pod
+#pod =cut
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::MintingProfile::ShareDir;
-{
-  $Dist::Zilla::Role::MintingProfile::ShareDir::VERSION = '4.300030';
-}
 # ABSTRACT: something that keeps its minting profile in a sharedir
+$Dist::Zilla::Role::MintingProfile::ShareDir::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::MintingProfile';
 
@@ -11,6 +9,12 @@ use namespace::autoclean;
 use File::ShareDir;
 use Path::Class;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod This role includes L<Dist::Zilla::Role::MintingProfile>, providing a
+#pod C<profile_dir> method that looks in the I<module>'s L<ShareDir|File::ShareDir>.
+#pod
+#pod =cut
 
 sub profile_dir {
   my ($self, $profile_name) = @_;
@@ -29,13 +33,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::MintingProfile::ShareDir - something that keeps its minting profile in a sharedir
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -48,7 +54,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::MintingProfile;
-{
-  $Dist::Zilla::Role::MintingProfile::VERSION = '4.300030';
-}
 # ABSTRACT: something that can find a minting profile dir
+$Dist::Zilla::Role::MintingProfile::VERSION = '5.019';
 use Moose::Role;
 
 use namespace::autoclean;
@@ -10,6 +8,24 @@ use namespace::autoclean;
 use File::ShareDir;
 use Path::Class;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role should provide C<profile_dir> method, which,
+#pod given a minting profile name, returns its directory.
+#pod
+#pod The minting profile is a directory, containing arbitrary files used during
+#pod creation of new distribution. Among other things notably, it should contain the
+#pod 'profile.ini' file, listing the plugins used for minter initialization.
+#pod
+#pod The default implementation C<profile_dir> looks in the module's
+#pod L<ShareDir|File::ShareDir>.
+#pod
+#pod After installing your profile, users will be able to start a new distribution,
+#pod based on your profile with the:
+#pod
+#pod   $ dzil new -P Provider -p profile_name Distribution::Name
+#pod
+#pod =cut
 
 requires 'profile_dir';
 
@@ -19,13 +35,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::MintingProfile - something that can find a minting profile dir
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -50,7 +68,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::ModuleMaker;
-{
-  $Dist::Zilla::Role::ModuleMaker::VERSION = '4.300030';
-}
 # ABSTRACT: something that injects module files into the dist
+$Dist::Zilla::Role::ModuleMaker::VERSION = '5.019';
 use Moose::Role;
 with qw(
   Dist::Zilla::Role::Plugin
@@ -11,6 +9,19 @@ with qw(
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<make_module> method called for each
+#pod module requesting creation by the plugin with this name.  It is passed a
+#pod hashref with the following data:
+#pod
+#pod   name - the name of the module to make (a MooseX::Types::Perl::ModuleName)
+#pod
+#pod Classes composing this role also compose
+#pod L<FileInjector|Dist::Zilla::Role::FileInjector> and are expected to inject a
+#pod file for the module being created.
+#pod
+#pod =cut
 
 requires 'make_module';
 
@@ -20,13 +31,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::ModuleMaker - something that injects module files into the dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -46,7 +59,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,169 @@
+package Dist::Zilla::Role::MutableFile;
+# ABSTRACT: something that can act like a file with changeable contents
+$Dist::Zilla::Role::MutableFile::VERSION = '5.019';
+use Moose::Role;
+
+use Moose::Util::TypeConstraints;
+use MooseX::SetOnce;
+use namespace::autoclean;
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This role describes a file whose contents may be modified
+#pod
+#pod =attr encoding
+#pod
+#pod Default is 'UTF-8'. Can only be set once.
+#pod
+#pod =cut
+
+with 'Dist::Zilla::Role::File';
+
+sub encoding;
+
+has encoding => (
+  is          => 'rw',
+  isa         => 'Str',
+  lazy        => 1,
+  default     => 'UTF-8',
+  traits      => [ qw(SetOnce) ],
+);
+
+#pod =attr content
+#pod
+#pod =cut
+
+has _content => (
+  is          => 'rw',
+  isa         => 'Str',
+  lazy        => 1,
+  builder     => '_build_content',
+  clearer     => 'clear_content',
+  predicate   => 'has_content',
+);
+
+sub content {
+  my $self = shift;
+  if ( ! @_ ) {
+    # if we have it or we're tasked to provide it, return it (possibly lazily
+    # generated from a builder); otherwise, get it from the encoded_content
+    if ( $self->has_content || $self->_content_source eq 'content' ) {
+      return $self->_content;
+    }
+    else {
+      return $self->_content($self->_decode($self->encoded_content));
+    }
+  }
+  else {
+    my ($pkg, undef, $line) = caller;
+    $self->_update_by('content', sprintf( "%s line %s", $pkg, $line));
+    $self->clear_encoded_content;
+    return $self->_content(@_);
+  }
+}
+
+#pod =attr encoded_content
+#pod
+#pod =cut
+
+has _encoded_content => (
+  is          => 'rw',
+  isa         => 'Str',
+  lazy        => 1,
+  builder     => '_build_encoded_content',
+  clearer     => 'clear_encoded_content',
+  predicate   => 'has_encoded_content',
+);
+
+sub encoded_content {
+  my $self = shift;
+  if ( ! @_ ) {
+    # if we have it or we're tasked to provide it, return it (possibly lazily
+    # generated from a builder); otherwise, get it from the content
+    if ($self->has_encoded_content || $self->_content_source eq 'encoded_content') {
+      return $self->_encoded_content;
+    }
+    else {
+      return $self->_encoded_content($self->_encode($self->content));
+    }
+  }
+  my ($pkg, undef, $line) = caller;
+  $self->_update_by('encoded_content', sprintf( "%s line %s", $pkg, $line));
+  $self->clear_content;
+  $self->_encoded_content(@_);
+}
+
+has _content_source => (
+    is => 'rw',
+    isa => enum([qw/content encoded_content/]),
+    lazy => 1,
+    builder => '_build_content_source',
+);
+
+sub _update_by {
+  my ($self, $attr, $from) = @_;
+  $self->_content_source($attr);
+  $self->_set_added_by($from);
+}
+
+around 'added_by' => sub {
+  my ($orig, $self) = @_;
+  return sprintf("%s set by %s", $self->_content_source, $self->$orig);
+};
+
+# we really only need one of these and only if _content or _encoded_content
+# isn't provided, but roles can't do that, so we'll insist on both just in case
+# and let classes provide stubs if they provide _content or _encoded_content
+# another way
+
+requires '_build_content';
+requires '_build_encoded_content';
+
+# we need to know the content source so we know where we might need to rely on
+# lazy loading to give us content. It should be set by the class if there is a
+# class-wide default or just stubbed if a BUILD modifier sets it per-object.
+
+requires '_build_content_source';
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Role::MutableFile - something that can act like a file with changeable contents
+
+=head1 VERSION
+
+version 5.019
+
+=head1 DESCRIPTION
+
+This role describes a file whose contents may be modified
+
+=head1 ATTRIBUTES
+
+=head2 encoding
+
+Default is 'UTF-8'. Can only be set once.
+
+=head2 content
+
+=head2 encoded_content
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,11 +1,19 @@
 package Dist::Zilla::Role::NameProvider;
-{
-  $Dist::Zilla::Role::NameProvider::VERSION = '4.300030';
-}
 # ABSTRACT: something that provides a name for the dist
+$Dist::Zilla::Role::NameProvider::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role must provide a C<provide_name> method that
+#pod will be called when setting the dist's name.
+#pod
+#pod If a NameProvider offers a name but one has already been set, an
+#pod exception will be raised.  If C<provide_name> returns undef, it will be
+#pod ignored.
+#pod
+#pod =cut
 
 requires 'provide_name';
 
@@ -16,13 +24,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::NameProvider - something that provides a name for the dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -39,7 +49,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::PPI;
-{
-  $Dist::Zilla::Role::PPI::VERSION = '4.300030';
-}
 # ABSTRACT: a role for plugins which use PPI
+$Dist::Zilla::Role::PPI::VERSION = '5.019';
 use Moose::Role;
 
 use Moose::Util::TypeConstraints;
@@ -10,40 +8,88 @@ use Moose::Util::TypeConstraints;
 use namespace::autoclean;
 
 use Digest::MD5 qw(md5);
-
+use Storable qw(dclone);
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This role provides some common utilities for plugins which use PPI
+#pod
+#pod =method ppi_document_for_file
+#pod
+#pod   my $document = $self->ppi_document_for_file($file);
+#pod
+#pod Given a dzil file object (anything that does L<Dist::Zilla::Role::File>), this
+#pod method returns a new L<PPI::Document> for that file's content.
+#pod
+#pod Internally, this method caches these documents. If multiple plugins want a
+#pod document for the same file, this avoids reparsing it.
+#pod
+#pod =cut
 
 my %CACHE;
 
 sub ppi_document_for_file {
   my ($self, $file) = @_;
 
-  my $content = $file->content;
+  my $encoded_content = $file->encoded_content;
 
   # We cache on the MD5 checksum to detect if the document has been modified
   # by some other plugin since it was last parsed, our document is invalid.
-  my $md5 = md5($content);
-  return $CACHE{$md5} if $CACHE{$md5};
+  my $md5 = md5($encoded_content);
+  return $CACHE{$md5}->clone if $CACHE{$md5};
 
-  my $document = PPI::Document->new(\$content)
+  require PPI::Document;
+  my $document = PPI::Document->new(\$encoded_content)
     or Carp::croak(PPI::Document->errstr);
 
-  return $CACHE{$md5} = $document;
+  return ($CACHE{$md5} = $document)->clone;
 }
 
+#pod =method save_ppi_document_to_file
+#pod
+#pod   my $document = $self->save_ppi_document_to_file($document,$file);
+#pod
+#pod Given a L<PPI::Document> and a dzil file object (anything that does
+#pod L<Dist::Zilla::Role::File>), this method saves the serialized document in the
+#pod file.
+#pod
+#pod It also updates the internal PPI document cache with the new document.
+#pod
+#pod =cut
 
 sub save_ppi_document_to_file {
   my ($self, $document, $file) = @_;
 
   my $new_content = $document->serialize;
 
-  $CACHE{ md5($new_content) } = $document;
+  $file->encoded_content($new_content);
 
-  $file->content($new_content);
+  $CACHE{ md5($new_content) } = $document->clone;
 }
 
+#pod =method document_assigns_to_variable
+#pod
+#pod   if( $self->ppi_document_for_file($document, '$FOO')) { ... }
+#pod
+#pod This method returns true if the document assigns to the given variable.
+#pod
+#pod =cut
 
 sub document_assigns_to_variable {
-  my ($self, $document, $variable) = @_;
+  my ($self, $orig_document, $variable) = @_;
+
+  # Clone because ppi_document_for_file which the caller is likely to
+  # have retrieved his document from caches aggressively, and we'd
+  # like to prun POD and comments.
+  #
+  # It would be pretty stupid of us to say we found a variable in some
+  # comment or in the POD, which we might do because if the POD is
+  # preceded by __END__ or __DATA__ it'll be a PPI::Statement. So
+  # prune PPI::Statement::* things that we don't want, note that we
+  # don't have to prune e.g. PPI::Token::Pod because of the isa check
+  # in the finder below.
+  my $document = dclone($orig_document);
+  $document->prune($_) for qw(PPI::Statement::End PPI::Statement::Data);
 
   my $finder = sub {
     my $node = $_[1];
@@ -63,13 +109,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::PPI - a role for plugins which use PPI
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -109,7 +157,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::Plugin;
-{
-  $Dist::Zilla::Role::Plugin::VERSION = '4.300030';
-}
 # ABSTRACT: something that gets plugged in to Dist::Zilla
+$Dist::Zilla::Role::Plugin::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::ConfigDumper';
 
@@ -12,6 +10,16 @@ use MooseX::Types;
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod The Plugin role should be applied to all plugin classes.  It provides a few key
+#pod methods and attributes that all plugins will need.
+#pod
+#pod =attr plugin_name
+#pod
+#pod The plugin name is generally determined when configuration is read.
+#pod
+#pod =cut
 
 has plugin_name => (
   is  => 'ro',
@@ -19,6 +27,12 @@ has plugin_name => (
   required => 1,
 );
 
+#pod =attr zilla
+#pod
+#pod This attribute contains the Dist::Zilla object into which the plugin was
+#pod plugged.
+#pod
+#pod =cut
 
 has zilla => (
   is  => 'ro',
@@ -27,6 +41,12 @@ has zilla => (
   weak_ref => 1,
 );
 
+#pod =method log
+#pod
+#pod The plugin's C<log> method delegates to the Dist::Zilla object's
+#pod L<Dist::Zilla/log> method after including a bit of argument-munging.
+#pod
+#pod =cut
 
 has logger => (
   is   => 'ro',
@@ -75,13 +95,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::Plugin - something that gets plugged in to Dist::Zilla
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -112,7 +134,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,34 @@
 package Dist::Zilla::Role::PluginBundle::Easy;
-{
-  $Dist::Zilla::Role::PluginBundle::Easy::VERSION = '4.300030';
-}
 # ABSTRACT: something that bundles a bunch of plugins easily
 # This plugin was originally contributed by Christopher J. Madsen
+$Dist::Zilla::Role::PluginBundle::Easy::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::PluginBundle';
 
 use namespace::autoclean;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod   package Dist::Zilla::PluginBundle::Example;
+#pod   use Moose;
+#pod   with 'Dist::Zilla::Role::PluginBundle::Easy';
+#pod
+#pod   sub configure {
+#pod     my $self = shift;
+#pod
+#pod     $self->add_plugins('VersionFromModule');
+#pod     $self->add_bundle('Basic');
+#pod   }
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This role builds upon the PluginBundle role, adding methods to take most of the
+#pod grunt work out of creating a bundle.  It supplies the C<bundle_config> method
+#pod for you.  In exchange, you must supply a C<configure> method, which will store
+#pod the bundle's configuration in the C<plugins> attribute by calling
+#pod C<add_plugins> and/or C<add_bundle>.
+#pod
+#pod =cut
 
 use Moose::Autobox;
 use MooseX::Types::Moose qw(Str ArrayRef HashRef);
@@ -31,6 +51,12 @@ use namespace::autoclean;
 
 requires 'configure';
 
+#pod =attr name
+#pod
+#pod This is the bundle name, taken from the Section passed to
+#pod C<bundle_config>.
+#pod
+#pod =cut
 
 has name => (
   is       => 'ro',
@@ -38,6 +64,12 @@ has name => (
   required => 1,
 );
 
+#pod =attr payload
+#pod
+#pod This hashref contains the bundle's parameters (if any), taken from the
+#pod Section passed to C<bundle_config>.
+#pod
+#pod =cut
 
 has payload => (
   is       => 'ro',
@@ -45,6 +77,13 @@ has payload => (
   required => 1,
 );
 
+#pod =attr plugins
+#pod
+#pod This arrayref contains the configuration that will be returned by
+#pod C<bundle_config>.  You normally modify this by using the
+#pod C<add_plugins> and C<add_bundle> methods.
+#pod
+#pod =cut
 
 has plugins => (
   is       => 'ro',
@@ -62,6 +101,24 @@ sub bundle_config {
   return $self->plugins->flatten;
 }
 
+#pod =method add_plugins
+#pod
+#pod   $self->add_plugins('Plugin1', [ Plugin2 => \%plugin2config ])
+#pod
+#pod Use this method to add plugins to your bundle.
+#pod
+#pod It is passed a list of plugin specifiers, which can be one of a few things:
+#pod
+#pod =for :list
+#pod * a plugin moniker (like you might provide in your config file)
+#pod * an arrayref of: C<< [ $moniker, $plugin_name, \%plugin_config ] >>
+#pod
+#pod In the case of an arrayref, both C<$plugin_name> and C<\%plugin_config> are
+#pod optional.
+#pod
+#pod The plugins are added to the config in the order given.
+#pod
+#pod =cut
 
 sub add_plugins {
   my ($self, @plugin_specs) = @_;
@@ -90,6 +147,14 @@ sub add_plugins {
   }
 }
 
+#pod =method add_bundle
+#pod
+#pod   $self->add_bundle(BundleName => \%bundle_config)
+#pod
+#pod Use this method to add all the plugins from another bundle to your bundle.  If
+#pod you omit C<%bundle_config>, an empty hashref will be supplied.
+#pod
+#pod =cut
 
 sub add_bundle {
   my ($self, $bundle, $payload) = @_;
@@ -101,7 +166,7 @@ sub add_bundle {
   if( my $v = $payload->{':version'} ){
     $load_opts->{'-version'} = $v;
   }
-  Class::MOP::load_class($package, $load_opts);
+  Class::Load::load_class($package, $load_opts);
 
   $bundle = "\@$bundle" unless $bundle =~ /^@/;
 
@@ -114,6 +179,20 @@ sub add_bundle {
   );
 }
 
+#pod =method config_slice
+#pod
+#pod   $hash_ref = $self->config_slice(arg1, { arg2 => 'plugin_arg2' })
+#pod
+#pod Use this method to extract parameters from your bundle's C<payload> so
+#pod that you can pass them to a plugin or subsidiary bundle.  It supports
+#pod easy renaming of parameters, since a plugin may expect a parameter
+#pod name that's too generic to be suitable for a bundle.
+#pod
+#pod Each arg is either a key in C<payload>, or a hashref that maps keys in
+#pod C<payload> to keys in the hash being constructed.  If any specified
+#pod key does not exist in C<payload>, then it is omitted from the result.
+#pod
+#pod =cut
 
 sub config_slice {
   my $self = shift;
@@ -141,13 +220,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::PluginBundle::Easy - something that bundles a bunch of plugins easily
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -206,7 +287,7 @@ a plugin moniker (like you might provide in your config file)
 
 =item *
 
-an arrayref of: C<< [ $moniker, $plugin_name, \%plugin_config >>
+an arrayref of: C<< [ $moniker, $plugin_name, \%plugin_config ] >>
 
 =back
 
@@ -241,7 +322,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,18 @@
 package Dist::Zilla::Role::PluginBundle;
-{
-  $Dist::Zilla::Role::PluginBundle::VERSION = '4.300030';
-}
 # ABSTRACT: something that bundles a bunch of plugins
+$Dist::Zilla::Role::PluginBundle::VERSION = '5.019';
 use Moose::Role;
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod When loading configuration, if the config reader encounters a PluginBundle, it
+#pod will replace its place in the plugin list with the result of calling its
+#pod C<bundle_config> method, which will be passed a Config::MVP::Section to
+#pod configure the bundle.
+#pod
+#pod =cut
 
 sub register_component {
   my ($class, $name, $arg, $self) = @_;
@@ -22,13 +28,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::PluginBundle - something that bundles a bunch of plugins
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -43,7 +51,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
 package Dist::Zilla::Role::PrereqSource;
-{
-  $Dist::Zilla::Role::PrereqSource::VERSION = '4.300030';
-}
 # ABSTRACT: something that registers prerequisites
+$Dist::Zilla::Role::PrereqSource::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod PrereqSource plugins have a C<register_prereqs> method that should register
+#pod prereqs with the Dist::Zilla object.
+#pod
+#pod =cut
 
 requires 'register_prereqs';
 
@@ -17,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::PrereqSource - something that registers prerequisites
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
 package Dist::Zilla::Role::Releaser;
-{
-  $Dist::Zilla::Role::Releaser::VERSION = '4.300030';
-}
 # ABSTRACT: something that makes a release of the dist
+$Dist::Zilla::Role::Releaser::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<release> method called when
+#pod releasing.  It's passed the distribution tarball to be released.
+#pod
+#pod =cut
 
 requires 'release';
 
@@ -17,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::Releaser - something that makes a release of the dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::ShareDir;
-{
-  $Dist::Zilla::Role::ShareDir::VERSION = '4.300030';
-}
 # ABSTRACT: something that picks a directory to install as shared files
+$Dist::Zilla::Role::ShareDir::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::FileFinder';
 
@@ -20,13 +18,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::ShareDir - something that picks a directory to install as shared files
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -34,7 +34,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
 package Dist::Zilla::Role::Stash::Authors;
-{
-  $Dist::Zilla::Role::Stash::Authors::VERSION = '4.300030';
-}
+# ABSTRACT: a stash that provides a list of author strings
+$Dist::Zilla::Role::Stash::Authors::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Stash';
-# ABSTRACT: a stash that provides a list of author strings
 
 use namespace::autoclean;
 
+#pod =head1 OVERVIEW
+#pod
+#pod An Authors stash must provide an C<authors> method that returns an arrayref of
+#pod author strings, generally in the form "Name <email>".
+#pod
+#pod =cut
 
 requires 'authors';
 
@@ -17,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::Stash::Authors - a stash that provides a list of author strings
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 OVERVIEW
 
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,16 @@
 package Dist::Zilla::Role::Stash::Login;
-{
-  $Dist::Zilla::Role::Stash::Login::VERSION = '4.300030';
-}
+# ABSTRACT: a stash with username/password credentials
+$Dist::Zilla::Role::Stash::Login::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Stash';
-# ABSTRACT: a stash with username/password credentials
 
 use namespace::autoclean;
 
+#pod =head1 OVERVIEW
+#pod
+#pod A Login stash must provide a C<username> and C<password> method.
+#pod
+#pod =cut
 
 requires 'username';
 requires 'password';
@@ -18,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::Stash::Login - a stash with username/password credentials
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 OVERVIEW
 
@@ -36,7 +41,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
 package Dist::Zilla::Role::Stash;
-{
-  $Dist::Zilla::Role::Stash::VERSION = '4.300030';
-}
 # ABSTRACT: something that stores options or data for later reference
+$Dist::Zilla::Role::Stash::VERSION = '5.019';
 use Moose::Role;
 
 use namespace::autoclean;
@@ -31,13 +29,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::Stash - something that stores options or data for later reference
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -45,7 +45,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,35 @@
+package Dist::Zilla::Role::StubBuild;
+# ABSTRACT: provides an empty BUILD methods
+$Dist::Zilla::Role::StubBuild::VERSION = '5.019';
+use Moose::Role;
+
+sub BUILD {}
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Role::StubBuild - provides an empty BUILD methods
+
+=head1 VERSION
+
+version 5.019
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,34 +1,86 @@
 package Dist::Zilla::Role::TestRunner;
-{
-  $Dist::Zilla::Role::TestRunner::VERSION = '4.300030';
-}
 # ABSTRACT: something used as a delegating agent to 'dzil test'
+$Dist::Zilla::Role::TestRunner::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<test> method called when
+#pod testing.  It's passed the root directory of the build test dir and an
+#pod optional hash reference of arguments.  Valid arguments include:
+#pod
+#pod =for :list
+#pod * jobs -- if parallel testing is supported, this indicates how many to run at once
+#pod
+#pod =method test
+#pod
+#pod This method should throw an exception on failure.
+#pod
+#pod =cut
 
 requires 'test';
 
+#pod =attr default_jobs
+#pod
+#pod This attribute is the default value that should be used as the C<jobs> argument
+#pod to the C<test> method.
+#pod
+#pod =cut
+
+has default_jobs => (
+  is      => 'ro',
+  isa     => 'Int', # non-negative
+  default => 1,
+);
+
+around dump_config => sub {
+  my ($orig, $self) = @_;
+  my $config = $self->$orig;
+
+  $config->{'' . __PACKAGE__} = { default_jobs => $self->default_jobs };
+
+  return $config;
+};
+
 1;
 
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::TestRunner - something used as a delegating agent to 'dzil test'
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
 Plugins implementing this role have their C<test> method called when
-testing.  It's passed the root directory of the build test dir.
+testing.  It's passed the root directory of the build test dir and an
+optional hash reference of arguments.  Valid arguments include:
+
+=over 4
+
+=item *
+
+jobs -- if parallel testing is supported, this indicates how many to run at once
+
+=back
+
+=head1 ATTRIBUTES
+
+=head2 default_jobs
+
+This attribute is the default value that should be used as the C<jobs> argument
+to the C<test> method.
 
 =head1 METHODS
 
@@ -42,7 +94,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,26 @@
 package Dist::Zilla::Role::TextTemplate;
-{
-  $Dist::Zilla::Role::TextTemplate::VERSION = '4.300030';
-}
 # ABSTRACT: something that renders a Text::Template template string
+$Dist::Zilla::Role::TextTemplate::VERSION = '5.019';
 use Moose::Role;
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing TextTemplate may call their own C<L</fill_in_string>>
+#pod method to render templates using L<Text::Template|Text::Template>.
+#pod
+#pod =cut
 
 use Text::Template;
 
+#pod =attr delim
+#pod
+#pod This attribute (which can't easily be set!) is a two-element array reference
+#pod returning the Text::Template delimiters to use.  It defaults to C<{{> and
+#pod C<}}>.
+#pod
+#pod =cut
 
 # XXX: Later, add a way to set this in config. -- rjbs, 2008-06-02
 has delim => (
@@ -20,6 +31,18 @@ has delim => (
   default  => sub { [ qw(  {{  }}  ) ] },
 );
 
+#pod =method fill_in_string
+#pod
+#pod   my $rendered = $plugin->fill_in_string($template, \%stash, \%arg);
+#pod
+#pod This uses Text::Template to fill in the given template using the variables
+#pod given in the C<%stash>.  The stash becomes the HASH argument to Text::Template,
+#pod so scalars must be scalar references rather than plain scalars.
+#pod
+#pod C<%arg> is dereferenced and passed in as extra arguments to Text::Template's
+#pod C<fill_in_string> routine.
+#pod
+#pod =cut
 
 sub fill_in_string {
   my ($self, $string, $stash, $arg) = @_;
@@ -52,13 +75,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::TextTemplate - something that renders a Text::Template template string
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -92,7 +117,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,29 +1,46 @@
 package Dist::Zilla::Role::VersionProvider;
-{
-  $Dist::Zilla::Role::VersionProvider::VERSION = '4.300030';
-}
 # ABSTRACT: something that provides a version number for the dist
+$Dist::Zilla::Role::VersionProvider::VERSION = '5.019';
 use Moose::Role;
 with 'Dist::Zilla::Role::Plugin';
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role must provide a C<provide_version> method that
+#pod will be called when setting the dist's version.
+#pod
+#pod If a VersionProvider offers a version but one has already been set, an
+#pod exception will be raised.  If C<provides_version> returns undef, it will be
+#pod ignored.
+#pod
+#pod =cut
 
 requires 'provide_version';
 
 1;
 
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins implementing this role:
+#pod L<AutoVersion|Dist::Zilla::Plugin::AutoVersion>.
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Role::VersionProvider - something that provides a version number for the dist
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -45,7 +62,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,16 @@
 package Dist::Zilla::Stash::PAUSE;
-{
-  $Dist::Zilla::Stash::PAUSE::VERSION = '4.300030';
-}
-use Moose;
 # ABSTRACT: a stash of your PAUSE credentials
+$Dist::Zilla::Stash::PAUSE::VERSION = '5.019';
+use Moose;
 
 use namespace::autoclean;
 
+#pod =head1 OVERVIEW
+#pod
+#pod The PAUSE stash is a L<Login|Dist::Zilla::Role::Stash::Login> stash generally
+#pod used for uploading to PAUSE.
+#pod
+#pod =cut
 
 sub mvp_aliases {
   return { user => 'username' };
@@ -32,13 +36,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Stash::PAUSE - a stash of your PAUSE credentials
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 OVERVIEW
 
@@ -51,7 +57,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,8 @@
 package Dist::Zilla::Stash::Rights;
-{
-  $Dist::Zilla::Stash::Rights::VERSION = '4.300030';
-}
+# ABSTRACT: a stash of your default licensing terms
+$Dist::Zilla::Stash::Rights::VERSION = '5.019';
 use Moose;
 with 'Dist::Zilla::Role::Stash';
-# ABSTRACT: a stash of your default licensing terms
 
 use namespace::autoclean;
 
@@ -32,13 +30,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Stash::Rights - a stash of your default licensing terms
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -46,7 +46,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,7 @@
 package Dist::Zilla::Stash::User;
-{
-  $Dist::Zilla::Stash::User::VERSION = '4.300030';
-}
-use Moose;
 # ABSTRACT: a stash of user name and email
+$Dist::Zilla::Stash::User::VERSION = '5.019';
+use Moose;
 
 use namespace::autoclean;
 
@@ -32,13 +30,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Stash::User - a stash of user name and email
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -46,7 +46,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,11 @@
 package Dist::Zilla::Tester;
-{
-  $Dist::Zilla::Tester::VERSION = '4.300030';
-}
+# ABSTRACT: a testing-enabling stand-in for Dist::Zilla
+$Dist::Zilla::Tester::VERSION = '5.019';
 use Moose;
 extends 'Dist::Zilla::Dist::Builder';
-# ABSTRACT: a testing-enabling stand-in for Dist::Zilla
 
 # XXX: Adding this autoclean causes problem.  "Builder" and "Minter" do not
-# show in in tests.  I'm really not sure why. -- rjbs, 2011-08-19
+# show in tests.  I'm really not sure why. -- rjbs, 2011-08-19
 # use namespace::autoclean;
 
 use autodie;
@@ -15,6 +13,7 @@ use Dist::Zilla::Chrome::Test;
 use File::pushd ();
 use File::Spec;
 use File::Temp;
+use Path::Tiny;
 
 use Sub::Exporter::Util ();
 use Sub::Exporter -setup => {
@@ -36,10 +35,9 @@ sub builder { 'Dist::Zilla::Tester::_Builder' }
 sub minter { 'Dist::Zilla::Tester::_Minter' }
 
 {
-  package Dist::Zilla::Tester::_Role;
-{
-  $Dist::Zilla::Tester::_Role::VERSION = '4.300030';
-}
+  package
+    Dist::Zilla::Tester::_Role;
+
   use Moose::Role;
 
   has tempdir => (
@@ -66,14 +64,17 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
   sub slurp_file {
     my ($self, $filename) = @_;
 
-    return scalar do {
-      local $/;
-      open my $fh, '<', $self->tempdir->file($filename);
+    Path::Tiny::path(
+      $self->tempdir->file($filename)
+    )->slurp_utf8;
+  }
 
-      # Win32.
-      binmode $fh, ':raw';
-      <$fh>;
-    };
+  sub slurp_file_raw {
+    my ($self, $filename) = @_;
+
+    Path::Tiny::path(
+      $self->tempdir->file($filename)
+    )->slurp_raw;
   }
 
   sub _metadata_generator_id { 'Dist::Zilla::Tester' }
@@ -83,10 +84,8 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
 
 {
   package Dist::Zilla::Tester::_Builder;
-{
-  $Dist::Zilla::Tester::_Builder::VERSION = '4.300030';
-}
-  use Moose;
+$Dist::Zilla::Tester::_Builder::VERSION = '5.019';
+use Moose;
   extends 'Dist::Zilla::Dist::Builder';
   with 'Dist::Zilla::Tester::_Role';
 
@@ -126,13 +125,7 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
       while (my ($name, $content) = each %$files) {
         my $fn = $tempdir->file($name);
         $fn->dir->mkpath;
-        open my $fh, '>', $fn;
-
-        # Win32 fix for crlf translation.
-        #   maybe :raw:utf8? -- Kentnl - 2010-06-10
-        binmode $fh, ':raw';
-        print { $fh } $content;
-        close $fh;
+        Path::Tiny::path($fn)->spew_utf8($content);
       }
     }
 
@@ -179,10 +172,8 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
 
 {
   package Dist::Zilla::Tester::_Minter;
-{
-  $Dist::Zilla::Tester::_Minter::VERSION = '4.300030';
-}
-  use Moose;
+$Dist::Zilla::Tester::_Minter::VERSION = '5.019';
+use Moose;
   extends 'Dist::Zilla::Dist::Minter';
   with 'Dist::Zilla::Tester::_Role';
 
@@ -266,13 +257,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Tester - a testing-enabling stand-in for Dist::Zilla
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -280,7 +273,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,25 +1,154 @@
 use strict;
 use warnings;
 package Dist::Zilla::Tutorial;
-{
-  $Dist::Zilla::Tutorial::VERSION = '4.300030';
-}
 # ABSTRACT: how to use this "Dist::Zilla" thing
+$Dist::Zilla::Tutorial::VERSION = '5.019';
 use Carp ();
 Carp::confess "you're not meant to use the tutorial, just read it!";
 1;
 
+#pod =head1 SYNOPSIS
+#pod
+#pod B<BEFORE YOU GET STARTED>:  Maybe you should be looking at the web-based
+#pod tutorial instead.  It's more complete.  L<http://dzil.org/tutorial/start.html>
+#pod
+#pod Dist::Zilla builds distributions to be uploaded to the CPAN.  That means that
+#pod the first thing you'll need is some code.
+#pod
+#pod Once you've got that, you'll need to configure Dist::Zilla.  Here's a simple
+#pod F<dist.ini>:
+#pod
+#pod   name    = Carbon-Dating
+#pod   version = 0.003
+#pod   author  = Alan Smithee <asmithee@example.org>
+#pod   license = Perl_5
+#pod   copyright_holder = Alan Smithee
+#pod
+#pod   [@Basic]
+#pod
+#pod   [Prereqs]
+#pod   App::Cmd          = 0.013
+#pod   Number::Nary      = 0
+#pod   Sub::Exporter     = 0.981
+#pod
+#pod The topmost section configures Dist::Zilla itself.  Here are some of the
+#pod entries it expects:
+#pod
+#pod   name     - (required) the name of the dist being built
+#pod   version  - (required) the version of the dist
+#pod   abstract - (required) a short description of the dist
+#pod   author   - (optional) the dist author (you may have multiple entries for this)
+#pod   license  - (required) the dist license; must be a Software::License::* name
+#pod
+#pod   copyright_holder - (required) the entity holding copyright on the dist
+#pod
+#pod Some of the required values above may actually be provided by means other than
+#pod the top-level section of the config.  For example,
+#pod L<VersionProvider|Dist::Zilla::Role::VersionProvider> plugins can
+#pod set the version, and a line like this in the "main module" of the dist will set
+#pod the abstract:
+#pod
+#pod   # ABSTRACT: a totally cool way to do totally great stuff
+#pod
+#pod The main modules is the module that shares the same name as the dist, in
+#pod general.
+#pod
+#pod Named sections load plugins, with the following rules:
+#pod
+#pod If a section name begins with an equals sign (C<=>), the rest of the section
+#pod name is left intact and not expanded.  If the section name begins with an at
+#pod sign (C<@>), it is prepended with C<Dist::Zilla::PluginBundle::>.  Otherwise,
+#pod it is prepended with C<Dist::Zilla::Plugin::>.
+#pod
+#pod The values inside a section are given as configuration to the plugin.  Consult
+#pod each plugin's documentation for more information.
+#pod
+#pod The "Basic" bundle, seen above, builds a fairly normal distribution.  It
+#pod rewrites tests from F<./xt>, adds some information to POD, and builds a
+#pod F<Makefile.PL>.  For more information, you can look at the docs for
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic> and see the plugins it includes.
+#pod
+#pod =head1 BUILDING YOUR DIST
+#pod
+#pod Maybe we're getting ahead of ourselves, here.  Configuring a bunch of plugins
+#pod won't do you a lot of good unless you know how to use them to build your dist.
+#pod
+#pod Dist::Zilla ships with a command called F<dzil> that will get installed by
+#pod default.  While it can be extended to offer more commands, there are two really
+#pod useful ones:
+#pod
+#pod   $ dzil build
+#pod
+#pod The C<build> command will build the distribution.  Say you're using the
+#pod configuration in the SYNOPSIS above.  You'll end up with a file called
+#pod F<Carbon-Dating-0.004.tar.gz>.  As long as you've done everything right, it
+#pod will be suitable for uploading to the CPAN.
+#pod
+#pod Of course, you should really test it out first.  You can test the dist you'd be
+#pod building by running another F<dzil> command:
+#pod
+#pod   $ dzil test
+#pod
+#pod This will build a new copy of your distribution and run its tests, so you'll
+#pod know whether the dist that C<build> would build is worth releasing!
+#pod
+#pod =head1 HOW BUILDS GET BUILT
+#pod
+#pod This is really more of a sketchy overview than a spec.
+#pod
+#pod First, all the plugins that perform the
+#pod L<BeforeBuild|Dist::Zilla::Role::BeforeBuild> perform their C<before_build>
+#pod tasks.
+#pod
+#pod The build root (where the dist is being built) is made.
+#pod
+#pod The L<FileGatherer|Dist::Zilla::Role::FileGatherer>s gather and inject files
+#pod into the distribution, then the L<FilePruner|Dist::Zilla::Role::FilePruner>s
+#pod remove some of them.
+#pod
+#pod All the L<FileMunger|Dist::Zilla::Role::FileMunger>s get a chance to muck about
+#pod with each file, possibly changing its name, content, or installability.
+#pod
+#pod Now that the distribution is basically set up, it needs an install tool, like a
+#pod F<Makefile.PL>.  All the
+#pod L<InstallTool|Dist::Zilla::Role::InstallTool>-performing plugins are used to
+#pod do whatever is needed to make the dist installable.
+#pod
+#pod Everything is just about done.  The files are all written out to disk and the
+#pod L<AfterBuild|Dist::Zilla::Role::AfterBuild> plugins do their thing.
+#pod
+#pod =head1 RELEASING YOUR DIST
+#pod
+#pod By running C<dzil release>, you'll test your
+#pod distribution, build a tarball of it, and upload it to the CPAN.  Plugins are
+#pod able to do things like check your version control system to make sure you're
+#pod releasing a new version and that you tag the version you've just uploaded.  It
+#pod can also update your Changelog file, too, making sure that you don't need to
+#pod know what your next version number will be before releasing.
+#pod
+#pod The final CPAN release process is implemented by the
+#pod L<UploadToCPAN|Dist::Zilla::Plugin::UploadToCPAN> plugin. However you can
+#pod replace it by your own to match your own (company?) process.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod L<dzil>
+#pod
+#pod =cut
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Tutorial - how to use this "Dist::Zilla" thing
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 SYNOPSIS
 
@@ -40,7 +169,7 @@ F<dist.ini>:
 
   [@Basic]
 
-  [Prereq]
+  [Prereqs]
   App::Cmd          = 0.013
   Number::Nary      = 0
   Sub::Exporter     = 0.981
@@ -133,7 +262,7 @@ L<AfterBuild|Dist::Zilla::Role::AfterBuild> plugins do their thing.
 
 =head1 RELEASING YOUR DIST
 
-By running C<dzil release>, you'll can test your
+By running C<dzil release>, you'll test your
 distribution, build a tarball of it, and upload it to the CPAN.  Plugins are
 able to do things like check your version control system to make sure you're
 releasing a new version and that you tag the version you've just uploaded.  It
@@ -154,7 +283,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,17 @@
 package Dist::Zilla::Types;
-{
-  $Dist::Zilla::Types::VERSION = '4.300030';
-}
 # ABSTRACT: dzil-specific type library
-
+$Dist::Zilla::Types::VERSION = '5.019';
 use namespace::autoclean;
 
+#pod =head1 OVERVIEW
+#pod
+#pod This library provides L<MooseX::Types> types for use by Dist::Zilla.  These
+#pod types are not (yet?) for public consumption, and you should not rely on them.
+#pod
+#pod Dist::Zilla uses a number of types found in L<MooseX::Types::Perl>.  Maybe
+#pod that's what you want.
+#pod
+#pod =cut
 
 use MooseX::Types -declare => [qw(License OneZero YesNoStr)];
 use MooseX::Types::Moose qw(Str Int);
@@ -24,13 +30,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Types - dzil-specific type library
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 OVERVIEW
 
@@ -46,7 +54,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,8 @@
 use strict;
 use warnings;
 package Dist::Zilla::Util::AuthorDeps;
-{
-  $Dist::Zilla::Util::AuthorDeps::VERSION = '4.300030';
-}
 # ABSTRACT: Utils for listing your distribution's author dependencies
-
+$Dist::Zilla::Util::AuthorDeps::VERSION = '5.019';
 use Dist::Zilla::Util;
 use Path::Class;
 use List::MoreUtils ();
@@ -32,6 +29,7 @@ sub extract_author_deps {
     unless -e $ini;
 
   my $fh = $ini->openr;
+  binmode($fh, ":encoding(UTF-8)");
 
   require Config::INI::Reader;
   my $config = Config::INI::Reader->read_handle($fh);
@@ -89,8 +87,8 @@ sub extract_author_deps {
 
   # Move inc:: first in list as they may impact the loading of other
   # plugins (in particular local ones).
-  # Also order inc:: so that thoses that want to hack @INC with inc:: plugins
-  # can have a consistant playground.
+  # Also order inc:: so that those that want to hack @INC with inc:: plugins
+  # can have a consistent playground.
   # We don't sort the others packages to preserve the same (random) ordering
   # for the common case (no inc::, no '; authordep') as in previous dzil
   # releases.
@@ -103,7 +101,13 @@ sub extract_author_deps {
 
   my @final =
     map { { $_ => $vermap->{$_} } }
-    grep { $missing ? (! Class::Load::try_load_class($_, ($vermap->{$_} ? {-version => $vermap->{$_}} : ()))) : 1 }
+    grep {
+      $missing
+        ? $_ eq 'perl'
+          ? ($vermap->{perl} ? !eval "use $vermap->{perl}; 1" : ())
+          : (! Class::Load::try_load_class($_, ($vermap->{$_} ? {-version => $vermap->{$_}} : ())))
+        : 1
+      }
     List::MoreUtils::uniq
     @packages;
 
@@ -116,13 +120,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Util::AuthorDeps - Utils for listing your distribution's author dependencies
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 AUTHOR
 
@@ -130,7 +136,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,10 @@
 use strict;
 use warnings;
 package Dist::Zilla::Util;
-{
-  $Dist::Zilla::Util::VERSION = '4.300030';
-}
 # ABSTRACT: random snippets of code that Dist::Zilla wants
-
+$Dist::Zilla::Util::VERSION = '5.019';
 use Carp ();
+use Encode ();
 use String::RewritePrefix 0.002; # better string context behavior
 
 {
@@ -49,18 +47,40 @@ use String::RewritePrefix 0.002; # better string context behavior
       and $event->{content} =~ /^(?:\S+\s+)+?-+\s+(.+)\n$/s
     ) {
       $self->{abstract} = $1;
+      $self->{abstract} =~ s/\s+/\x20/g;
     }
   }
 }
 
+#pod =method abstract_from_file
+#pod
+#pod This method, I<which is likely to change or go away>, tries to guess the
+#pod abstract of a given file, assuming that it's Perl code.  It looks for a POD
+#pod C<=head1> section called "NAME" or a comment beginning with C<ABSTRACT:>.
+#pod
+#pod =cut
 
 sub abstract_from_file {
   my ($self, $file) = @_;
   my $e = Dist::Zilla::Util::PEA->_new;
-  $e->read_string($file->content);
+
+  my $chars = $file->content;
+  my $bytes = Encode::encode('UTF-8', $chars, Encode::FB_CROAK);
+
+  $e->read_string($bytes);
+
   return $e->{abstract};
 }
 
+#pod =method expand_config_package_name
+#pod
+#pod   my $pkg_name = Util->expand_config_package_name($string);
+#pod
+#pod This method, I<which is likely to change or go away>, rewrites the given string
+#pod into a package name.  Consult L<Dist::Zilla::Config|Dist::Zilla::Config> for
+#pod more information.
+#pod
+#pod =cut
 
 sub expand_config_package_name {
   my ($self, $package) = @_;
@@ -99,8 +119,8 @@ sub _assert_loaded_class_version_ok {
 
   my $have_version = $pkg->VERSION;
   unless ($req->accepts_module($pkg => $have_version)) {
-    Carp::confess( sprintf
-      "%s version (%s) not match required version: %s",
+    die( sprintf
+      "%s version (%s) does not match required version: %s\n",
       $pkg,
       $have_version,
       $version,
@@ -114,13 +134,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla::Util - random snippets of code that Dist::Zilla wants
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 METHODS
 
@@ -144,7 +166,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,11 @@
 package Dist::Zilla;
-{
-  $Dist::Zilla::VERSION = '4.300030';
-}
 # ABSTRACT: distribution builder; installer not included!
+$Dist::Zilla::VERSION = '5.019';
 use Moose 0.92; # role composition fixes
 with 'Dist::Zilla::Role::ConfigDumper';
 
+# This comment has fün̈n̈ÿ characters.
+
 use Moose::Autobox 0.09; # ->flatten
 use MooseX::Types::Moose qw(ArrayRef Bool HashRef Object Str);
 use MooseX::Types::Perl qw(DistName LaxVersionStr);
@@ -14,9 +14,9 @@ use Moose::Util::TypeConstraints;
 
 use Dist::Zilla::Types qw(License);
 
-use Hash::Merge::Simple ();
 use Log::Dispatchouli 1.100712; # proxy_loggers, quiet_fatal
 use Path::Class;
+use Path::Tiny;
 use List::Util qw(first);
 use Software::License 0.101370; # meta2_name
 use String::RewritePrefix;
@@ -29,6 +29,21 @@ use Dist::Zilla::Util;
 
 use namespace::autoclean;
 
+#pod =head1 DESCRIPTION
+#pod
+#pod Dist::Zilla builds distributions of code to be uploaded to the CPAN.  In this
+#pod respect, it is like L<ExtUtils::MakeMaker>, L<Module::Build>, or
+#pod L<Module::Install>.  Unlike those tools, however, it is not also a system for
+#pod installing code that has been downloaded from the CPAN.  Since it's only run by
+#pod authors, and is meant to be run on a repository checkout rather than on
+#pod published, released code, it can do much more than those tools, and is free to
+#pod make much more ludicrous demands in terms of prerequisites.
+#pod
+#pod If you have access to the web, you can learn more and find an interactive
+#pod tutorial at B<L<dzil.org|http://dzil.org/>>.  If not, try
+#pod L<Dist::Zilla::Tutorial>.
+#pod
+#pod =cut
 
 has chrome => (
   is  => 'rw',
@@ -36,6 +51,13 @@ has chrome => (
   required => 1,
 );
 
+#pod =attr name
+#pod
+#pod The name attribute (which is required) gives the name of the distribution to be
+#pod built.  This is usually the name of the distribution's main module, with the
+#pod double colons (C<::>) replaced with dashes.  For example: C<Dist-Zilla>.
+#pod
+#pod =cut
 
 has name => (
   is   => 'ro',
@@ -44,6 +66,11 @@ has name => (
   builder => '_build_name',
 );
 
+#pod =attr version
+#pod
+#pod This is the version of the distribution to be created.
+#pod
+#pod =cut
 
 has _version_override => (
   isa => LaxVersionStr,
@@ -95,6 +122,12 @@ sub _build_version {
   $version;
 }
 
+#pod =attr abstract
+#pod
+#pod This is a one-line summary of the distribution.  If none is given, one will be
+#pod looked for in the L</main_module> of the dist.
+#pod
+#pod =cut
 
 has abstract => (
   is   => 'rw',
@@ -122,6 +155,20 @@ has abstract => (
   }
 );
 
+#pod =attr main_module
+#pod
+#pod This is the module where Dist::Zilla might look for various defaults, like
+#pod the distribution abstract.  By default, it's derived from the distribution
+#pod name.  If your distribution is Foo-Bar, and F<lib/Foo/Bar.pm> exists,
+#pod that's the main_module.  Otherwise, it's the shortest-named module in the
+#pod distribution.  This may change!
+#pod
+#pod You can override the default by specifying the file path explicitly,
+#pod ie:
+#pod
+#pod   main_module = lib/Foo/Bar.pm
+#pod
+#pod =cut
 
 has _main_module_override => (
   isa => 'Str',
@@ -182,6 +229,19 @@ has main_module => (
   },
 );
 
+#pod =attr license
+#pod
+#pod This is the L<Software::License|Software::License> object for this dist's
+#pod license and copyright.
+#pod
+#pod It will be created automatically, if possible, with the
+#pod C<copyright_holder> and C<copyright_year> attributes.  If necessary, it will
+#pod try to guess the license from the POD of the dist's main module.
+#pod
+#pod A better option is to set the C<license> name in the dist's config to something
+#pod understandable, like C<Perl_5>.
+#pod
+#pod =cut
 
 has license => (
   is   => 'ro',
@@ -238,7 +298,8 @@ sub _build_license {
     if (@guess != 1) {
       $self->log_fatal(
         "no license data in config, no %Rights stash,",
-        "couldn't make a good guess at license from Pod; giving up"
+        "couldn't make a good guess at license from Pod; giving up. ",
+        "Perhaphs you need set global config file (dzil setup)?"
       );
     }
 
@@ -247,7 +308,7 @@ sub _build_license {
     $self->log("based on POD in $filename, guessing license is $guess[0]");
   }
 
-  Class::MOP::load_class($license_class);
+  Class::Load::load_class($license_class);
 
   my $license = $license_class->new({
     holder => $self->_copyright_holder,
@@ -307,6 +368,18 @@ has _copyright_year => (
   }
 );
 
+#pod =attr authors
+#pod
+#pod This is an arrayref of author strings, like this:
+#pod
+#pod   [
+#pod     'Ricardo Signes <rjbs@cpan.org>',
+#pod     'X. Ample, Jr <example@example.biz>',
+#pod   ]
+#pod
+#pod This is likely to change at some point in the near future.
+#pod
+#pod =cut
 
 has authors => (
   is   => 'ro',
@@ -329,6 +402,16 @@ has authors => (
   },
 );
 
+#pod =attr files
+#pod
+#pod This is an arrayref of objects implementing L<Dist::Zilla::Role::File> that
+#pod will, if left in this arrayref, be built into the dist.
+#pod
+#pod Non-core code should avoid altering this arrayref, but sometimes there is not
+#pod other way to change the list of files.  In the future, the representation used
+#pod for storing files B<will be changed>.
+#pod
+#pod =cut
 
 has files => (
   is   => 'ro',
@@ -351,6 +434,12 @@ sub prune_file {
   return;
 }
 
+#pod =attr root
+#pod
+#pod This is the root directory of the dist, as a L<Path::Class::Dir>.  It will
+#pod nearly always be the current working directory in which C<dzil> was run.
+#pod
+#pod =cut
 
 has root => (
   is   => 'ro',
@@ -359,6 +448,11 @@ has root => (
   required => 1,
 );
 
+#pod =attr is_trial
+#pod
+#pod This attribute tells us whether or not the dist will be a trial release.
+#pod
+#pod =cut
 
 has is_trial => (
   is => 'rw', # XXX: make SetOnce -- rjbs, 2010-03-23
@@ -366,6 +460,15 @@ has is_trial => (
   default => sub { $ENV{TRIAL} ? 1 : 0 }
 );
 
+#pod =attr plugins
+#pod
+#pod This is an arrayref of plugins that have been plugged into this Dist::Zilla
+#pod object.
+#pod
+#pod Non-core code B<must not> alter this arrayref.  Public access to this attribute
+#pod B<may go away> in the future.
+#pod
+#pod =cut
 
 has plugins => (
   is   => 'ro',
@@ -374,6 +477,13 @@ has plugins => (
   default  => sub { [ ] },
 );
 
+#pod =attr distmeta
+#pod
+#pod This is a hashref containing the metadata about this distribution that will be
+#pod stored in META.yml or META.json.  You should not alter the metadata in this
+#pod hash; use a MetaProvider plugin instead.
+#pod
+#pod =cut
 
 has distmeta => (
   is   => 'ro',
@@ -389,13 +499,13 @@ sub _build_distmeta {
   my $meta = {
     'meta-spec' => {
       version => 2,
-      url     => 'http://github.com/dagolden/cpan-meta/',
+      url     => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec',
     },
     name     => $self->name,
     version  => $self->version,
     abstract => $self->abstract,
     author   => $self->authors,
-    license  => $self->license->meta2_name,
+    license  => [ $self->license->meta2_name ],
 
     # XXX: what about unstable?
     release_status => ($self->is_trial or $self->version =~ /_/)
@@ -408,14 +518,27 @@ sub _build_distmeta {
                     . (defined $self->VERSION ? $self->VERSION : '(undef)')
   };
 
-  $meta = Hash::Merge::Simple::merge($meta, $_->metadata)
-    for $self->plugins_with(-MetaProvider)->flatten;
+  require Hash::Merge::Simple;
+  my $dynamic;
+  for ($self->plugins_with(-MetaProvider)->flatten) {
+    my $plugin_meta = $_->metadata;
+    $meta = Hash::Merge::Simple::merge($meta, $plugin_meta);
+    $dynamic = 1 if $plugin_meta->{dynamic_config};
+  }
+
+  $meta->{dynamic_config} = 1 if $dynamic;
 
   return $meta;
 }
 
 sub _metadata_generator_id { 'Dist::Zilla' }
 
+#pod =attr prereqs
+#pod
+#pod This is a L<Dist::Zilla::Prereqs> object, which is a thin layer atop
+#pod L<CPAN::Meta::Prereqs>, and describes the distribution's prerequisites.
+#pod
+#pod =cut
 
 has prereqs => (
   is   => 'ro',
@@ -425,6 +548,11 @@ has prereqs => (
   handles  => [ qw(register_prereqs) ],
 );
 
+#pod =method plugin_named
+#pod
+#pod   my $plugin = $zilla->plugin_named( $plugin_name );
+#pod
+#pod =cut
 
 sub plugin_named {
   my ($self, $name) = @_;
@@ -434,6 +562,15 @@ sub plugin_named {
   return;
 }
 
+#pod =method plugins_with
+#pod
+#pod   my $roles = $zilla->plugins_with( -SomeRole );
+#pod
+#pod This method returns an arrayref containing all the Dist::Zilla object's plugins
+#pod that perform a the named role.  If the given role name begins with a dash, the
+#pod dash is replaced with "Dist::Zilla::Role::"
+#pod
+#pod =cut
 
 sub plugins_with {
   my ($self, $role) = @_;
@@ -444,6 +581,16 @@ sub plugins_with {
   return $plugins;
 }
 
+#pod =method find_files
+#pod
+#pod   my $files = $zilla->find_files( $finder_name );
+#pod
+#pod This method will look for a
+#pod L<FileFinder|Dist::Zilla::Role::FileFinder>-performing plugin with the given
+#pod name and return the result of calling C<find_files> on it.  If no plugin can be
+#pod found, an exception will be raised.
+#pod
+#pod =cut
 
 sub find_files {
   my ($self, $finder_name) = @_;
@@ -492,18 +639,24 @@ sub _write_out_file {
 
   Carp::croak("attempted to write $to multiple times") if -e $to;
 
-  open my $out_fh, '>', "$to" or die "couldn't open $to to write: $!";
-
-  # This is needed, or \n is translated to \r\n on win32.
-  # Maybe :raw:utf8 is needed, but not sure.
-  #     -- Kentnl - 2010-06-10
-  binmode( $out_fh , ":raw" );
-
-  print { $out_fh } $file->content;
-  close $out_fh or die "error closing $to: $!";
+  path("$to")->spew_raw( $file->encoded_content );
   chmod $file->mode, "$to" or die "couldn't chmod $to: $!";
 }
 
+#pod =attr logger
+#pod
+#pod This attribute stores a L<Log::Dispatchouli::Proxy> object, used to log
+#pod messages.  By default, a proxy to the dist's L<Chrome|Dist::Zilla::Chrome> is
+#pod taken.
+#pod
+#pod The following methods are delegated from the Dist::Zilla object to the logger:
+#pod
+#pod =for :list
+#pod * log
+#pod * log_debug
+#pod * log_fatal
+#pod
+#pod =cut
 
 has logger => (
   is   => 'ro',
@@ -536,6 +689,15 @@ has _global_stashes => (
   default => sub { {} },
 );
 
+#pod =method stash_named
+#pod
+#pod   my $stash = $zilla->stash_named( $name );
+#pod
+#pod This method will return the stash with the given name, or undef if none exists.
+#pod It looks for a local stash (for this dist) first, then falls back to a global
+#pod stash (from the user's global configuration).
+#pod
+#pod =cut
 
 sub stash_named {
   my ($self, $name) = @_;
@@ -547,17 +709,77 @@ sub stash_named {
 __PACKAGE__->meta->make_immutable;
 1;
 
+#pod =head1 SUPPORT
+#pod
+#pod There are usually people on C<irc.perl.org> in C<#distzilla>, even if they're
+#pod idling.
+#pod
+#pod The L<Dist::Zilla website|http://dzil.org/> has several valuable resources for
+#pod learning to use Dist::Zilla.
+#pod
+#pod There is a mailing list to discuss Dist::Zilla.  You can L<join the
+#pod list|http://www.listbox.com/subscribe/?list_id=139292> or L<browse the
+#pod archives|http://listbox.com/member/archive/139292>.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod In the Dist::Zilla distribution:
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod Plugin bundles:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<@Filter|Dist::Zilla::PluginBundle::Filter>.
+#pod
+#pod =item *
+#pod
+#pod Major plugins:
+#pod L<GatherDir|Dist::Zilla::Plugin::GatherDir>,
+#pod L<Prereqs|Dist::Zilla::Plugin::Prereqs>,
+#pod L<AutoPrereqs|Dist::Zilla::Plugin::AutoPrereqs>,
+#pod L<MetaYAML|Dist::Zilla::Plugin::MetaYAML>,
+#pod L<MetaJSON|Dist::Zilla::Plugin::MetaJSON>,
+#pod ...
+#pod
+#pod =back
+#pod
+#pod =item *
+#pod
+#pod On the CPAN:
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod Search for plugins: L<https://metacpan.org/search?q=Dist::Zilla::Plugin::>
+#pod
+#pod =item *
+#pod
+#pod Search for plugin bundles: L<https://metacpan.org/search?q=Dist::Zilla::PluginBundle::>
+#pod
+#pod =back
+#pod
+#pod =back
+
 __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Dist::Zilla - distribution builder; installer not included!
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -782,7 +1004,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,8 @@
 use strict;
 use warnings;
 package Test::DZil;
-{
-  $Test::DZil::VERSION = '4.300030';
-}
 # ABSTRACT: tools for testing Dist::Zilla plugins
-
+$Test::DZil::VERSION = '5.019';
 use Dist::Zilla::Tester;
 use Params::Util qw(_HASH0);
 use JSON 2;
@@ -26,7 +23,31 @@ use Sub::Exporter -setup => {
   groups  => [ default => [ qw(-all) ] ],
 };
 
-
+#pod =head1 DESCRIPTION
+#pod
+#pod Test::DZil provides routines for writing tests for Dist::Zilla plugins.
+#pod
+#pod =cut
+
+#pod =func Builder
+#pod
+#pod =func Minter
+#pod
+#pod   my $tzil = Builder->from_config(...);
+#pod
+#pod These return class names that subclass L<Dist::Zilla::Dist::Builder> or
+#pod L<Dist::Zilla::Dist::Minter>, respectively, with the L<Dist::Zilla::Tester>
+#pod behavior added.
+#pod
+#pod =func is_filelist
+#pod
+#pod   is_filelist( \@files_we_have, \@files_we_want, $desc );
+#pod
+#pod This test assertion compares two arrayrefs of filenames, taking care of slash
+#pod normalization and sorting.  C<@files_we_have> may also contain objects that
+#pod do L<Dist::Zilla::Role::File>.
+#pod
+#pod =cut
 
 sub is_filelist {
   my ($have, $want, $comment) = @_;
@@ -42,6 +63,14 @@ sub is_filelist {
   Test::More::is_deeply(\@have, \@want, $comment);
 }
 
+#pod =func is_yaml
+#pod
+#pod   is_yaml( $yaml_string, $want_struct, $comment );
+#pod
+#pod This test assertion deserializes the given YAML string and does a
+#pod C<L<cmp_deeply|Test::Deep/cmp_deeply>>.
+#pod
+#pod =cut
 
 sub is_yaml {
   my ($yaml, $want, $comment) = @_;
@@ -53,6 +82,14 @@ sub is_yaml {
   Test::Deep::cmp_deeply($have->[0], $want, $comment);
 }
 
+#pod =func is_json
+#pod
+#pod   is_json( $json_string, $want_struct, $comment );
+#pod
+#pod This test assertion deserializes the given JSON string and does a
+#pod C<L<cmp_deeply|Test::Deep/cmp_deeply>>.
+#pod
+#pod =cut
 
 sub is_json {
   my ($json, $want, $comment) = @_;
@@ -113,11 +150,70 @@ sub _build_ini_builder {
   }
 }
 
+#pod =func dist_ini
+#pod
+#pod   my $ini_text = dist_ini(\%root_config, @plugins);
+#pod
+#pod This routine returns a string that could be used to populate a simple
+#pod F<dist.ini> file.  The C<%root_config> gives data for the "root" section of the
+#pod configuration.  To provide a line multiple times, provide an arrayref.  For
+#pod example, the root section could read:
+#pod
+#pod   {
+#pod     name   => 'Dist-Sample',
+#pod     author => [
+#pod       'J. Smith <jsmith@example.com>',
+#pod       'Q. Smith <qsmith@example.com>',
+#pod     ],
+#pod   }
+#pod
+#pod The root section is optional.
+#pod
+#pod Plugins can be given in a few ways:
+#pod
+#pod =begin :list
+#pod
+#pod = C<"PluginMoniker">
+#pod
+#pod = C<[ "PluginMoniker" ]>
+#pod
+#pod These become C<[PluginMoniker]>
+#pod
+#pod = C<[ "PluginMoniker", "PluginName" ]>
+#pod
+#pod This becomes C<[PluginMoniker / PluginName]>
+#pod
+#pod = C<[ "PluginMoniker", { ... } ]>
+#pod
+#pod = C<[ "PluginMoniker", "PluginName", { ... } ]>
+#pod
+#pod These use the given hashref as the parameters inside the section, with the same
+#pod semantics as the root section.
+#pod
+#pod =end :list
+#pod
+#pod =cut
 
 sub _dist_ini {
   _build_ini_builder;
 }
 
+#pod =func simple_ini
+#pod
+#pod This behaves exactly like C<dist_ini>, but it merges any given root config into
+#pod a starter config, which means that you can often skip any explicit root config.
+#pod The starter config may change slightly over time, but is something like this:
+#pod
+#pod   {
+#pod     name     => 'DZT-Sample',
+#pod     abstract => 'Sample DZ Dist',
+#pod     version  => '0.001',
+#pod     author   => 'E. Xavier Ample <example@example.org>',
+#pod     license  => 'Perl_5',
+#pod     copyright_holder => 'E. Xavier Ample',
+#pod   }
+#pod
+#pod =cut
 
 sub _simple_ini {
   _build_ini_builder({
@@ -136,13 +232,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Test::DZil - tools for testing Dist::Zilla plugins
 
 =head1 VERSION
 
-version 4.300030
+version 5.019
 
 =head1 DESCRIPTION
 
@@ -245,7 +343,7 @@ Ricardo SIGNES <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,73 +0,0 @@
-#!perl
-
-use strict;
-use warnings;
-
-use Test::More;
-
-
-
-use File::Find;
-use File::Temp qw{ tempdir };
-
-my @modules;
-find(
-  sub {
-    return if $File::Find::name !~ /\.pm\z/;
-    my $found = $File::Find::name;
-    $found =~ s{^lib/}{};
-    $found =~ s{[/\\]}{::}g;
-    $found =~ s/\.pm$//;
-    return if $found =~ /Dist::Zilla::Tutorial/;
-    push @modules, $found;
-  },
-  'lib',
-);
-
-sub _find_scripts {
-    my $dir = shift @_;
-
-    my @found_scripts = ();
-    find(
-      sub {
-        return unless -f;
-        my $found = $File::Find::name;
-        return if $found =~ /Dist::Zilla::Tutorial/;
-        open my $FH, '<', $_ or do {
-          note( "Unable to open $found in ( $! ), skipping" );
-          return;
-        };
-        my $shebang = <$FH>;
-        return unless $shebang =~ /^#!.*?\bperl\b\s*$/;
-        push @found_scripts, $found;
-      },
-      $dir,
-    );
-
-    return @found_scripts;
-}
-
-my @scripts;
-do { push @scripts, _find_scripts($_) if -d $_ }
-    for qw{ bin script scripts };
-
-my $plan = scalar(@modules) + scalar(@scripts);
-$plan ? (plan tests => $plan) : (plan skip_all => "no tests to run");
-
-{
-    # fake home for cpan-testers
-    # no fake requested ## local $ENV{HOME} = tempdir( CLEANUP => 1 );
-
-    like( qx{ $^X -Ilib -e "require $_; print '$_ ok'" }, qr/^\s*$_ ok/s, "$_ loaded ok" )
-        for sort @modules;
-
-    SKIP: {
-        eval "use Test::Script 1.05; 1;";
-        skip "Test::Script needed to test script compilation", scalar(@scripts) if $@;
-        foreach my $file ( @scripts ) {
-            my $script = $file;
-            $script =~ s!.*/!!;
-            script_compiles( $file, "$script script compiles" );
-        }
-    }
-}
@@ -9,7 +9,7 @@ our $success = 0;
 END { $success && done_testing; }
 
 # List our own version used to generate this
-my $v = "\nGenerated by Dist::Zilla::Plugin::ReportVersions::Tiny v1.08\n";
+my $v = "\nGenerated by Dist::Zilla::Plugin::ReportVersions::Tiny v1.10\n";
 
 eval {                     # no excuses!
     # report our Perl details
@@ -48,15 +48,17 @@ sub pmver {
     return sprintf('%-45s => %-10s%-15s%s', $module, $pmver, $wanted, "\n");
 }
 
+eval { $v .= pmver('App::Cmd::Command::version','any version') };
 eval { $v .= pmver('App::Cmd::Setup','0.309') };
 eval { $v .= pmver('App::Cmd::Tester','0.306') };
 eval { $v .= pmver('App::Cmd::Tester::CaptureExternal','any version') };
 eval { $v .= pmver('Archive::Tar','any version') };
+eval { $v .= pmver('Archive::Tar::Wrapper','0.15') };
 eval { $v .= pmver('CPAN::Meta::Converter','2.101550') };
 eval { $v .= pmver('CPAN::Meta::Prereqs','2.120630') };
 eval { $v .= pmver('CPAN::Meta::Requirements','2.121') };
 eval { $v .= pmver('CPAN::Meta::Validator','2.101550') };
-eval { $v .= pmver('CPAN::Uploader','0.101550') };
+eval { $v .= pmver('CPAN::Uploader','0.103004') };
 eval { $v .= pmver('Carp','any version') };
 eval { $v .= pmver('Class::Load','0.17') };
 eval { $v .= pmver('Config::INI::Reader','any version') };
@@ -68,19 +70,18 @@ eval { $v .= pmver('Config::MVP::Reader::Finder','any version') };
 eval { $v .= pmver('Config::MVP::Reader::INI','2') };
 eval { $v .= pmver('Config::MVP::Section','2.200002') };
 eval { $v .= pmver('Data::Dumper','any version') };
-eval { $v .= pmver('Data::Section','0.004') };
+eval { $v .= pmver('Data::Section','0.200002') };
 eval { $v .= pmver('DateTime','0.44') };
 eval { $v .= pmver('Digest::MD5','any version') };
 eval { $v .= pmver('Encode','any version') };
 eval { $v .= pmver('ExtUtils::MakeMaker','6.30') };
 eval { $v .= pmver('ExtUtils::Manifest','1.54') };
 eval { $v .= pmver('File::Copy::Recursive','any version') };
-eval { $v .= pmver('File::Find','any version') };
 eval { $v .= pmver('File::Find::Rule','any version') };
 eval { $v .= pmver('File::HomeDir','any version') };
 eval { $v .= pmver('File::Path','any version') };
 eval { $v .= pmver('File::ShareDir','any version') };
-eval { $v .= pmver('File::ShareDir::Install','0.03') };
+eval { $v .= pmver('File::ShareDir::Install','0.06') };
 eval { $v .= pmver('File::Spec','any version') };
 eval { $v .= pmver('File::Temp','any version') };
 eval { $v .= pmver('File::pushd','any version') };
@@ -90,6 +91,7 @@ eval { $v .= pmver('List::AllUtils','any version') };
 eval { $v .= pmver('List::MoreUtils','any version') };
 eval { $v .= pmver('List::Util','any version') };
 eval { $v .= pmver('Log::Dispatchouli','1.102220') };
+eval { $v .= pmver('Mixin::Linewise::Readers','0.100') };
 eval { $v .= pmver('Moose','0.92') };
 eval { $v .= pmver('Moose::Autobox','0.10') };
 eval { $v .= pmver('Moose::Role','any version') };
@@ -102,39 +104,45 @@ eval { $v .= pmver('MooseX::Types::Moose','any version') };
 eval { $v .= pmver('MooseX::Types::Path::Class','any version') };
 eval { $v .= pmver('MooseX::Types::Perl','any version') };
 eval { $v .= pmver('PPI','any version') };
+eval { $v .= pmver('PPI::Document','any version') };
 eval { $v .= pmver('Params::Util','any version') };
-eval { $v .= pmver('Path::Class','any version') };
-eval { $v .= pmver('Perl::PrereqScanner','1.005') };
+eval { $v .= pmver('Path::Class','0.22') };
+eval { $v .= pmver('Path::Tiny','any version') };
+eval { $v .= pmver('Perl::PrereqScanner','1.016') };
 eval { $v .= pmver('Perl::Version','any version') };
 eval { $v .= pmver('Pod::Eventual','0.091480') };
 eval { $v .= pmver('Scalar::Util','any version') };
 eval { $v .= pmver('Software::License','0.101370') };
 eval { $v .= pmver('Software::License::None','any version') };
 eval { $v .= pmver('Software::LicenseUtils','any version') };
+eval { $v .= pmver('Storable','any version') };
 eval { $v .= pmver('String::Formatter','0.100680') };
 eval { $v .= pmver('String::RewritePrefix','0.005') };
 eval { $v .= pmver('Sub::Exporter','any version') };
 eval { $v .= pmver('Sub::Exporter::ForMethods','any version') };
 eval { $v .= pmver('Sub::Exporter::Util','any version') };
+eval { $v .= pmver('Term::Encoding','any version') };
 eval { $v .= pmver('Term::ReadKey','any version') };
 eval { $v .= pmver('Term::ReadLine','any version') };
 eval { $v .= pmver('Term::ReadLine::Gnu','any version') };
 eval { $v .= pmver('Term::UI','any version') };
 eval { $v .= pmver('Test::Deep','any version') };
+eval { $v .= pmver('Test::FailWarnings','any version') };
 eval { $v .= pmver('Test::Fatal','any version') };
 eval { $v .= pmver('Test::File::ShareDir','any version') };
 eval { $v .= pmver('Test::More','0.96') };
-eval { $v .= pmver('Test::Pod','1.41') };
 eval { $v .= pmver('Text::Glob','0.08') };
 eval { $v .= pmver('Text::Template','any version') };
 eval { $v .= pmver('Try::Tiny','any version') };
 eval { $v .= pmver('YAML::Tiny','any version') };
 eval { $v .= pmver('autobox','2.53') };
 eval { $v .= pmver('autodie','any version') };
+eval { $v .= pmver('lib','any version') };
 eval { $v .= pmver('namespace::autoclean','any version') };
 eval { $v .= pmver('parent','any version') };
 eval { $v .= pmver('strict','any version') };
-eval { $v .= pmver('version','0.9901') };
+eval { $v .= pmver('utf8','any version') };
+eval { $v .= pmver('version','any version') };
 eval { $v .= pmver('warnings','any version') };
 
 
@@ -17,7 +17,10 @@ my $authordeps =
 
 is_deeply(
     $authordeps,
-    [ map { +{"Dist::Zilla::Plugin::$_" => 0} } qw<AutoPrereqs ExecDir GatherDir MetaYAML> ],
+    [
+      +{ perl => '5.005' },
+      map { +{"Dist::Zilla::Plugin::$_" => 0} } qw<AutoPrereqs Encoding ExecDir GatherDir MetaYAML>,
+    ],
     "authordeps in corpus/dist/AutoPrereqs"
 ) or diag explain $authordeps;
 
@@ -0,0 +1,178 @@
+use strict;
+use warnings;
+use utf8;
+use Test::More;
+use Test::Fatal;
+use Test::FailWarnings -allow_deps => 1;
+binmode(Test::More->builder->$_, ":utf8") for qw/output failure_output todo_output/;
+
+use Encode;
+use Path::Tiny;
+
+use Dist::Zilla::File::InMemory;
+use Dist::Zilla::File::OnDisk;
+use Dist::Zilla::File::FromCode;
+
+my %sample = (
+  dolmen  => "Olivier Mengué",
+  keedi   =>"김도형 - Keedi Kim",
+);
+
+my $sample              = join("\n", values %sample);
+my $encoded_sample      = encode("UTF-8", $sample);
+my $db_sample           = $sample x 2;
+my $db_encoded_sample   = $encoded_sample x 2;
+my $latin1_dolmen       = encode("latin1", $sample{dolmen});
+
+sub new_args {
+  my (undef, $file, $line) = caller;
+  $file = path($file)->relative;
+  my %args = (
+    name => 'foo.txt',
+    added_by => "$file line $line",
+    @_
+  );
+  return [\%args];
+}
+
+sub test_mutable_roundtrip {
+  my ($obj) = @_;
+
+  ok( $obj->DOES("Dist::Zilla::Role::MutableFile"), "does MutableFile role" );
+
+  # assumes object content starts as $sample
+  is( $obj->content, $sample, "get content" );
+  is( $obj->encoded_content, $encoded_sample, "get encoded_content" );
+
+  # set content, check content & encoded_content
+  ok( $obj->content($db_sample), "set content");
+  is( $obj->content, $db_sample, "get content");
+  is( $obj->encoded_content, $db_encoded_sample, "get encoded_content");
+
+  # set encoded_content, check encoded_content & content
+  ok( $obj->encoded_content($encoded_sample), "set encoded_content");
+  is( $obj->encoded_content, $encoded_sample, "get encoded_content");
+  is( $obj->content, $sample, "get content");
+}
+
+sub test_content_from_bytes {
+  my ($obj, $source_re) = @_;
+  # assumes object encoded_content is encoded sample
+  is( $obj->encoded_content, $encoded_sample, "get encoded_content" );
+  my $err = exception { $obj->content };
+  like(
+    $err,
+    qr/can't decode text from 'bytes'/i,
+    "get content from bytes should throw error"
+  );
+  like( $err, $source_re, "error shows encoded_content source" );
+}
+
+sub test_latin1 {
+  my ($obj) = @_;
+  # assumes encoded_content is $latin1_dolmen and encoding
+  # is already set to 'latin1"
+  is( $obj->encoded_content, $latin1_dolmen, "get encoded_content" );
+  is( $obj->content, $sample{dolmen}, "get content" );
+}
+
+subtest "OnDisk" => sub {
+  my $class = "Dist::Zilla::File::OnDisk";
+
+  subtest "UTF-8 file" => sub {
+    my $tempfile = Path::Tiny->tempfile;
+
+    ok( $tempfile->spew_utf8($sample), "create UTF-8 encoded tempfile" );
+    my $obj = new_ok( $class, new_args(name => "$tempfile") );
+    test_mutable_roundtrip($obj);
+  };
+
+  subtest "binary file" => sub {
+    my $tempfile = Path::Tiny->tempfile;
+
+    ok( $tempfile->spew_raw($encoded_sample), "create binary tempfile" );
+    my $obj = new_ok( $class, new_args(name => "$tempfile") );
+    ok( $obj->encoding("bytes"), "set encoding to 'bytes'");
+    test_content_from_bytes($obj, qr/encoded_content set by \S+ line \d+/);
+  };
+
+  subtest "latin1 file" => sub {
+    my $tempfile = Path::Tiny->tempfile;
+
+    ok(
+      $tempfile->spew( { binmode => ":encoding(latin1)"}, $sample{dolmen} ),
+      "create latin1 tempfile"
+    );
+    my $obj = new_ok( $class, new_args(name => "$tempfile", encoding => 'latin1') );
+    test_latin1($obj);
+  };
+
+};
+
+subtest "InMemory" => sub {
+  my $class = "Dist::Zilla::File::InMemory";
+
+  subtest "UTF-8 string" => sub {
+    my $obj = new_ok( $class, new_args(content => $sample) );
+    test_mutable_roundtrip($obj);
+  };
+
+  subtest "binary string" => sub {
+    my $obj = new_ok( $class, new_args( encoded_content => $encoded_sample ) );
+    ok( $obj->encoding("bytes"), "set encoding to 'bytes'");
+    test_content_from_bytes($obj, qr/encoded_content set by \S+ line \d+/);
+  };
+
+  subtest "latin1 string" => sub {
+    my $obj = new_ok(
+      $class, new_args(encoded_content => $latin1_dolmen, encoding => "latin1")
+    );
+    test_latin1($obj);
+  };
+
+};
+
+subtest "FromCode" => sub {
+  my $class = "Dist::Zilla::File::FromCode";
+
+  subtest "UTF-8 string" => sub {
+    my $obj = new_ok( $class, new_args( code => sub { $sample } ));
+    is( $obj->content, $sample, "content" );
+    is( $obj->encoded_content, $encoded_sample, "encoded_content" );
+  };
+
+  subtest "content immutable" => sub {
+    my $obj = new_ok( $class, new_args( code => sub { $sample } ));
+    like(
+      exception { $obj->content($sample) },
+      qr/cannot set content/,
+      "changing content should throw error"
+    );
+    like(
+      exception { $obj->encoded_content($encoded_sample) },
+      qr/cannot set encoded_content/,
+      "changing encoded_content should throw error"
+    );
+  };
+
+  subtest "binary string" => sub {
+    my $obj = new_ok(
+      $class, new_args( code_return_type => 'bytes', code => sub { $encoded_sample } )
+    );
+    test_content_from_bytes($obj, qr/bytes from coderef set by \S+ line \d+/);
+  };
+
+  subtest "latin1 string" => sub {
+    my $obj = new_ok(
+      $class, new_args(
+        code_return_type => 'bytes',
+        code => sub { $latin1_dolmen },
+        encoding => 'latin1',
+      )
+    );
+    test_latin1($obj);
+  };
+
+};
+
+done_testing;
@@ -44,6 +44,7 @@ my %wanted = (
   'DZPA::Role'            => 0,
   'DZPA::ScriptUse'       => 0,
   'base'                  => 0,
+  'lib'                   => 0,
   'parent'                => 0,
   'perl'                  => 5.008,
   'strict'                => 0,
@@ -2,8 +2,7 @@ use strict;
 use warnings;
 use Test::More 0.88;
 use Test::Fatal;
-
-use lib 't/lib';
+use Test::Deep;
 
 use Test::DZil;
 
@@ -71,8 +70,8 @@ for my $yes (qw(y yes)) {
   );
 }
 
-my $prompt = "*** Preparing to release DZT-Sample-0.001.tar.gz with FakeRelease ***\n"
-           . "Do you want to continue the release process?";
+
+my $prompt = "Do you want to continue the release process?";
 
 for my $no (qw(n no)) {
   my $tzil = new_tzil;
@@ -85,6 +84,12 @@ for my $no (qw(n no)) {
     "ConfirmRelease aborts when answering '$no'",
   );
 
+  cmp_deeply(
+    $tzil->log_messages,
+    supersetof("[ConfirmRelease] *** Preparing to release DZT-Sample-0.001.tar.gz with FakeRelease ***"),
+    'supplementary information was also displayed',
+  ) or diag explain $tzil->log_messages;
+
   ok(!release_happened($tzil), "release did not happen when answering '$no'");
 }
 
@@ -99,6 +104,12 @@ for my $yes (qw(y yes)) {
     "ConfirmRelease no exception when answering '$yes'",
   );
 
+  cmp_deeply(
+    $tzil->log_messages,
+    supersetof("[ConfirmRelease] *** Preparing to release DZT-Sample-0.001.tar.gz with FakeRelease ***"),
+    'supplementary information was also displayed',
+  ) or diag explain $tzil->log_messages;
+
   ok(release_happened($tzil), "answering '$yes' allows release");
 }
 
@@ -1,6 +1,7 @@
 use strict;
 use warnings;
 use Test::More 0.88;
+use utf8;
 
 use lib 't/lib';
 
@@ -147,4 +148,33 @@ use YAML::Tiny;
   }
 }
 
+{ # non-ASCII
+  my $tzil = Builder->from_config(
+    { dist_root => 'corpus/dist/DZ-NonAscii' },
+  );
+
+  $tzil->build;
+
+  my @files = map {; $_->name } @{ $tzil->files };
+
+  my %meta;
+
+  my $json = $tzil->slurp_file('build/META.json');
+  $meta{json} = JSON->new->decode($json);
+
+  my $yaml = $tzil->slurp_file('build/META.yml');
+  $meta{yaml} = YAML::Tiny->new->read_string($yaml)->[0];
+
+  for my $type (qw(json yaml)) {
+    is_deeply(
+      $meta{$type}{author},
+      [
+        'Olivier Mengué <dolmen@example.org>',
+        '김도형 <keedi@example.com>'
+      ],
+      "authors ($type) are set as expected, decode properly",
+    );
+  }
+}
+
 done_testing;
@@ -4,6 +4,7 @@ use Test::More 0.88;
 
 use lib 't/lib';
 
+use ExtUtils::Manifest 'maniread';
 use Test::DZil;
 
 my $tzil = Builder->from_config(
@@ -20,12 +21,18 @@ my $tzil = Builder->from_config(
           root   => '../corpus/dist/DZT_Bin',
           prefix => 'bin',
         } ],
+        [ GatherDir => MySHARE => {
+          root   => '../corpus/dist/DZT_Share',
+          prefix => 'share',
+        } ],
         [ ExecDir => ],
+        [ ShareDir => ],
         'Manifest',
       ),
     },
     also_copy => { 'corpus/dist/DZT_Inc' => 'corpus/dist/DZT_Inc',
-                   'corpus/dist/DZT_Bin' => 'corpus/dist/DZT_Bin'
+                   'corpus/dist/DZT_Bin' => 'corpus/dist/DZT_Bin',
+                   'corpus/dist/DZT_Share' => 'corpus/dist/DZT_Share'
     },
   },
 );
@@ -37,7 +44,9 @@ my @files = map {; $_->name } @{ $tzil->files };
 is_filelist(
   [ @files ],
   [ qw(
-    dist.ini lib/DZT/Sample.pm t/basic.t
+    dist.ini lib/DZT/Sample.pm
+    share/my_data.dat
+    t/basic.t
     MANIFEST
     inc/Foo.pm inc/Foo/Bar.pm
     bin/test.pl
@@ -45,12 +54,11 @@ is_filelist(
   "GatherDir gathers all files in the source dir",
 );
 
-my $manifest = $tzil->slurp_file('build/MANIFEST');
-my %in_manifest = map {; chomp; $_ => 1 } grep {length} split /\n/, $manifest;
+my $manifest = maniread($tzil->tempdir->file('build/MANIFEST')->stringify);
 
-my $count = grep { $in_manifest{$_} } @files;
+my $count = grep { exists $manifest->{$_} } @files;
 ok($count == @files, "all files found were in manifest");
-ok(keys(%in_manifest) == @files, "all files in manifest were on disk");
+ok(keys(%$manifest) == @files, "all files in manifest were on disk");
 
 # Test our finders
 my $files = $tzil->find_files(':InstallModules');
@@ -89,15 +97,27 @@ is_filelist(
   "ExecFiles finds all files",
 );
 
-# XXX I don't use sharedir, how do I configure it? --apocal
-# disabled for now because DZ::Tester doesn't allow sharedir finder to work...
-# Can't locate object method "zilla" via package "Dist::Zilla::Tester::_Builder" at blib/lib/Dist/Zilla/Dist/Builder.pm line 114.
-#$files = $tzil->find_files(':ShareFiles');
-#is_filelist(
-#  [ map {; $_->name } @$files ],
-#  [  ],
-#  "ShareFiles finds all files",
-#);
+$files = $tzil->find_files(':ShareFiles');
+is_filelist(
+  [ map {; $_->name } @$files ],
+  [ qw(
+    share/my_data.dat
+  ) ],
+  "ShareFiles finds all files",
+);
 
-done_testing;
+$files = $tzil->find_files(':AllFiles');
+is_filelist(
+  [ map {; $_->name } @$files ],
+  [ @files ],
+  ":AllFiles finds all files",
+);
+
+$files = $tzil->find_files(':NoFiles');
+is_filelist(
+  [ map {; $_->name } @$files ],
+  [ ],
+  ":NoFiles finds no files",
+);
 
+done_testing;
@@ -4,6 +4,7 @@ use Test::More 0.88;
 
 use lib 't/lib';
 
+use ExtUtils::Manifest 'maniread';
 use Test::DZil;
 
 my $tzil = Builder->from_config(
@@ -58,12 +59,11 @@ is_filelist(
   "GatherDir gathers all files in the source dir",
 );
 
-my $manifest = $tzil->slurp_file('build/MANIFEST');
-my %in_manifest = map {; chomp; $_ => 1 } grep {length} split /\n/, $manifest;
+my $manifest = maniread($tzil->tempdir->file('build/MANIFEST')->stringify);
 
-my $count = grep { $in_manifest{$_} } @files;
+my $count = grep { exists $manifest->{$_} } @files;
 ok($count == @files, "all files found were in manifest");
-ok(keys(%in_manifest) == @files, "all files in manifest were on disk");
+ok(keys(%$manifest) == @files, "all files in manifest were on disk");
 
 done_testing;
 
@@ -1,6 +1,7 @@
 use strict;
 use warnings;
 use Test::More 0.88;
+use utf8;
 
 use lib 't/lib';
 
@@ -17,7 +18,7 @@ my $tzil = Builder->from_config(
             filename    => 'txt/dingo.txt',
             is_template => 1,
             content     => [
-              'Welcome to Dingo Kidneys {{ $dist->version }}',
+              'Welcome to Dingo Kidneys ⽝ {{ $dist->version }}',
               'Generated by {{ $plugin->VERSION || 0 }}',
             ],
           }
@@ -26,7 +27,7 @@ my $tzil = Builder->from_config(
           GenerateFile => Kidneys => {
             filename    => 'txt/dingo.tmpl',
             content     => [
-              'Welcome to Dingo Kidneys {{ $dist->version }}',
+              'Welcome to Dingo Kidneys ⽝ {{ $dist->version }}',
               'Generated by {{ $plugin->VERSION || 0 }}',
             ],
           }
@@ -43,7 +44,7 @@ $tzil->build;
 
   like(
     $contents,
-    qr{Kidneys 0.001\n}sm,
+    qr{Kidneys ⽝ 0.001\n}sm,
     'we render $dist stuff into dingo.txt',
   );
 
@@ -60,7 +61,7 @@ $tzil->build;
   is(
     $contents,
     <<'END_TMPL',
-Welcome to Dingo Kidneys {{ $dist->version }}
+Welcome to Dingo Kidneys ⽝ {{ $dist->version }}
 Generated by {{ $plugin->VERSION || 0 }}
 END_TMPL
     'we include template literals into dingo.tmpl',
@@ -1,36 +1,54 @@
 use strict;
 use warnings;
 use Test::More 0.88;
+use utf8;
 
 use lib 't/lib';
 
 use autodie;
 use Test::DZil;
 
-my $tzil = Builder->from_config(
-  { dist_root => 'corpus/dist/DZT' },
-  {
-    add_files => {
-      'source/dist.ini' => simple_ini('License'),
+subtest "ASCII-only author" => sub {
+  my $tzil = Builder->from_config(
+    { dist_root => 'corpus/dist/DZT' },
+    {
+      add_files => {
+        'source/dist.ini' => simple_ini('License'),
+      },
     },
-  },
-);
+  );
 
-$tzil->build;
+  $tzil->build;
 
-my $contents = $tzil->slurp_file('build/LICENSE');
+  my $contents = $tzil->slurp_file('build/LICENSE');
 
-like(
-  $contents,
-  qr{This software is copyright .c. [0-9]+ by E\. Xavier Ample}i,
-  "copyright appears in LICENSE file",
-);
+  like(
+    $contents,
+    qr{This software is copyright .c. [0-9]+ by E\. Xavier Ample}i,
+    "copyright appears in LICENSE file",
+  );
 
-like(
-  $contents,
-  qr{same terms as (the )?perl.*itself}i,
-  "'same terms as perl'-ish text appears in LICENSE",
-);
+  like(
+    $contents,
+    qr{same terms as (the )?perl.*itself}i,
+    "'same terms as perl'-ish text appears in LICENSE",
+  );
+};
 
-done_testing;
+subtest "non-ASCII author" => sub {
+  my $tzil = Builder->from_config(
+    { dist_root => 'corpus/dist/DZ-NonAscii' },
+  );
+
+  $tzil->build;
+
+  my $contents = $tzil->slurp_file('build/LICENSE');
 
+  like(
+    $contents,
+    qr{This software is copyright .c. [0-9]+ by ภูมิพลอดุลยเดช},
+    "copyright appears in LICENSE file",
+  );
+};
+
+done_testing;
@@ -40,6 +40,8 @@ use Test::DZil;
     },
     BUILD_REQUIRES     => {
       'Builder::Bob' => '9.901',
+    },
+    TEST_REQUIRES      => {
       'Test::Deet'   => '7',
     },
     CONFIGURE_REQUIRES => {
@@ -43,7 +43,7 @@ is_deeply(
   'manifest quotes files with spaces'
 );
 
-my @manilines = split /\n/, $tzil->slurp_file('build/MANIFEST');
+my @manilines = grep { ! /^#/ } split /\n/, $tzil->slurp_file('build/MANIFEST');
 chomp @manilines;
 
 is_deeply(
@@ -44,6 +44,8 @@ use Test::DZil;
     build_requires => {
       'Builder::Bob'  => '9.901',
       'Module::Build' => '0.3601',
+    },
+    test_requires => {
       'Test::Deet'    => '7',
     },
     'configure_requires' => {
@@ -1,6 +1,7 @@
 use strict;
 use warnings;
 use Test::More 0.88;
+use utf8;
 
 use lib 't/lib';
 
@@ -169,6 +170,31 @@ END_CHANGES
       add_files => {
         'source/Changes' => $changes,
         'source/dist.ini' => simple_ini(
+          qw(GatherDir NextRelease FakeRelease)
+        ),
+      },
+    },
+  );
+
+  $tzil_trial->build;
+
+  like(
+    $tzil_trial->slurp_file('build/Changes'),
+    # not using /m here because it stinks on 5.8.8
+    qr{0\.001 .+ \(TRIAL RELEASE\)},
+    "adding -TRIAL works",
+  );
+}
+
+{
+  local $ENV{TRIAL} = 1;
+
+  my $tzil_trial = Builder->from_config(
+    { dist_root => 'corpus/dist/DZT' },
+    {
+      add_files => {
+        'source/Changes' => $changes,
+        'source/dist.ini' => simple_ini(
                 'GatherDir',
                 [ NextRelease => { format => "%v%T", } ],
                 'FakeRelease',
@@ -295,4 +321,18 @@ END_CHANGES
   );
 }
 
+{
+  my $tzil = Builder->from_config(
+    { dist_root => 'corpus/dist/DZ-NonAscii' },
+  );
+
+  $tzil->build;
+
+  like(
+    $tzil->slurp_file('build/Changes'),
+    qr{Olivier Mengué},
+    "dolmen's name is unmangled",
+  );
+}
+
 done_testing;
@@ -26,6 +26,28 @@ print "\$VERSION = 1.234;"
 1;
 ';
 
+my $in_comment = '
+package DZT::WInComment;
+# our $VERSION = 1.234;
+1;
+';
+
+my $in_pod_stm = '
+package DZT::WInPODStm;
+
+1;
+
+__END__
+our $VERSION = 1.234;
+=for bug
+
+  # Because we have an __END__ up there PPI considers this a statement
+
+  our $VERSION = 1.234;
+
+=cut
+';
+
 my $two_packages = '
 package DZT::TP1;
 
@@ -74,6 +96,19 @@ my $script_pkg = '
 package DZT::Script;
 ';
 
+my $pod_with_pkg = '
+package DZT::PodWithPackage;
+=pod
+
+=cut
+';
+
+my $pod_no_pkg = '
+=pod
+
+=cut
+';
+
 my $tzil = Builder->from_config(
   { dist_root => 'corpus/dist/DZT' },
   {
@@ -82,9 +117,13 @@ my $tzil = Builder->from_config(
       'source/lib/DZT/WVer.pm'   => $with_version,
       'source/lib/DZT/WVerTwoLines.pm' => $with_version_two_lines,
       'source/lib/DZT/WStrEscaped.pm'  => $in_a_string_escaped,
+      'source/lib/DZT/WInComment.pm' => $in_comment,
+      'source/lib/DZT/WInPODStm.pm' => $in_pod_stm,
       'source/lib/DZT/R1.pm'     => $repeated_packages,
       'source/lib/DZT/Monkey.pm' => $monkey_patched,
       'source/lib/DZT/HideMe.pm' => $hide_me_comment,
+      'source/lib/DZT/PodWithPackage.pm' => $pod_with_pkg,
+      'source/lib/DZT/PodNoPackage.pm' => $pod_no_pkg,
       'source/bin/script_pkg.pl' => $script_pkg,
       'source/bin/script_ver.pl' => $script_pkg . "our \$VERSION = 1.234;\n",
       'source/bin/script.pl'     => $script,
@@ -129,6 +168,20 @@ unlike(
   "*not* added to DZT::WVerTwoLines; we have one already",
 );
 
+my $dzt_wver_in_comment = $tzil->slurp_file('build/lib/DZT/WInComment.pm');
+like(
+  $dzt_wver_in_comment,
+  qr{^\s*\$\QDZT::WInComment::VERSION = '0.001';\E\s*$}m,
+  "added to DZT::WInComment; the one we have is in a comment",
+);
+
+my $dzt_wver_in_pod_stm = $tzil->slurp_file('build/lib/DZT/WInPODStm.pm');
+like(
+  $dzt_wver_in_pod_stm,
+  qr{^\s*\$\QDZT::WInPODStm::VERSION = '0.001';\E\s*$}m,
+  "added to DZT::WInPODStm; the one we have is in some POD",
+);
+
 my $dzt_wver_str_escaped = $tzil->slurp_file('build/lib/DZT/WStrEscaped.pm');
 like(
   $dzt_wver_str_escaped,
@@ -189,6 +242,20 @@ unlike(
   "no version for DZT::TP2 when it was hidden with a comment"
 );
 
+my $dzt_podwithpackage = $tzil->slurp_file('build/lib/DZT/PodWithPackage.pm');
+like(
+  $dzt_podwithpackage,
+  qr{^\s*\$\QDZT::PodWithPackage::VERSION = '0.001';\E\s*$}m,
+  "added version to DZT::PodWithPackage",
+);
+
+my $dzt_podnopackage = $tzil->slurp_file('build/lib/DZT/PodNoPackage.pm');
+unlike(
+  $dzt_podnopackage,
+  qr{VERSION},
+  "no version for pod files with no package declaration"
+);
+
 {
   local $ENV{TRIAL} = 1;
 
@@ -204,6 +271,10 @@ unlike(
   $tzil_trial->build;
 
   my $dzt_sample_trial = $tzil_trial->slurp_file('build/lib/DZT/Sample.pm');
+  my $assignments = () = $dzt_sample_trial =~ /(DZT::Sample::VERSION =)/g;
+
+  is($assignments, 1, "we only add 1 VERSION assignment");
+
   like(
     $dzt_sample_trial,
     qr{^\s*\$\QDZT::Sample::VERSION = '0.001'; # TRIAL\E\s*$}m,
@@ -41,6 +41,22 @@ sub foo { }
 1;
 ';
 
+my $with_multi_line_abstract = '
+
+package DZT::MLA;
+
+=head1 NAME
+
+DZT::MLA - This abstract spans
+multiple lines.
+
+=cut
+
+sub foo { }
+
+1;
+';
+
 my $script = '
 #!/usr/bin/perl
 
@@ -59,6 +75,7 @@ my $tzil = Builder->from_config(
     add_files => {
       'source/lib/DZT/WPFP.pm' => $with_place_for_pod,
       'source/lib/DZT/WVer.pm' => $with_version,
+      'source/lib/DZT/MLA.pm' => $with_multi_line_abstract,
       'source/bin/script.pl'   => $script,
       'source/dist.ini' => simple_ini('GatherDir', 'PodVersion', 'ExecDir'),
     },
@@ -75,6 +92,19 @@ version 0.001
 =cut
 END_POD
 
+my $want_mla = <<'END_POD';
+=head1 NAME
+
+DZT::MLA - This abstract spans
+multiple lines.
+
+=head1 VERSION
+
+version 0.001
+
+=cut
+END_POD
+
 my $dzt_sample = $tzil->slurp_file('build/lib/DZT/Sample.pm');
 ok(
   index($dzt_sample, $want) == -1,
@@ -93,6 +123,12 @@ ok(
   "we didn't add version pod to WVer; it has one already",
 );
 
+my $dzt_mla = $tzil->slurp_file('build/lib/DZT/MLA.pm');
+ok(
+  index($dzt_mla, $want_mla) > 0,
+  "we properly skipped over multi-line abstract",
+);
+
 my $dzt_script = $tzil->slurp_file('build/bin/script.pl');
 ok(
   index($dzt_script, $want) > 0,
@@ -46,6 +46,47 @@ use Test::DZil;
   );
 }
 
+# test that we avoid a CPAN.pm bug by synchronizing Runtime|Build|Test requires
+{
+  my $tzil = Builder->from_config(
+    { dist_root => 'corpus/dist/DZT' },
+    {
+      add_files => {
+        'source/dist.ini' => simple_ini(
+          [ GatherDir => ],
+          [ MetaJSON  => ],
+          [ Prereqs => RuntimeRequires  => { A => 2, B => 0, C => 2 } ],
+          [ RemovePrereqs => { remove => [ qw(C) ] } ],
+          [ Prereqs => TestRequires     => { A => 1, B => 1, C => 1 } ],
+          [ Prereqs => BuildRequires    => { A => 0, B => 2, C => 0 } ],
+        ),
+      },
+    },
+  );
+
+  $tzil->build;
+
+  my $json = $tzil->slurp_file('build/META.json');
+
+  my $meta = JSON->new->decode($json);
+
+  is_deeply(
+    $meta->{prereqs},
+    {
+      runtime => {
+        requires   => { A => 2, B => 2 },
+      },
+      test => {
+        requires   => { A => 2, B => 2, C => 1 },
+      },
+      build => {
+        requires   => { A => 2, B => 2, C => 1 },
+      },
+    },
+    "prereqs synchronized across runtime, build & test phases",
+  );
+}
+
 {
   my $tzil = Builder->from_config(
     { dist_root => 'corpus/dist/DZT' },
@@ -1,6 +1,7 @@
 use strict;
 use warnings;
 use Test::More 0.88;
+use utf8;
 
 use lib 't/lib';
 
@@ -39,5 +40,21 @@ like(
   "dist name appears in README",
 );
 
+{
+  my $tzil = Builder->from_config(
+    { dist_root => 'corpus/dist/DZ-NonAscii' },
+  );
+
+  $tzil->build;
+
+  my $contents = $tzil->slurp_file('build/README');
+
+  like(
+    $contents,
+    qr{ภูมิพลอดุลยเดช},
+    "HRH unmangled in README",
+  );
+}
+
 done_testing;
 
@@ -13,6 +13,7 @@ $ENV{DZIL_GLOBAL_CONFIG_ROOT} = 't';
 
 my $result = test_dzil('corpus/dist/DZ1', [ qw(build) ]);
 
+is($result->error, undef, 'No errors');
 is($result->exit_code, 0, "dzil would have exited 0");
 
 ok(
@@ -18,6 +18,8 @@ my $tzil = Builder->from_config(
 
 $tzil->release;
 
+is($tzil->VERSION, Dist::Zilla->VERSION, "zilla tester VERSION");
+
 my $basename = $tzil->dist_basename;
 my $tarball  = $tzil->archive_filename;
 
@@ -22,8 +22,7 @@ If no real package is found, substitutes stubs instead of basic functions.
 =head1 SYNOPSIS
 EOP
 
-    is abstract_from_string($pod), 'Perl interface to various C<readline> packages.
-If no real package is found, substitutes stubs instead of basic functions.';
+    is abstract_from_string($pod), 'Perl interface to various C<readline> packages. If no real package is found, substitutes stubs instead of basic functions.';
 }
 
 {
@@ -4,7 +4,7 @@ use Test::More tests => 2;
 
 note 'Checking Changes';
 my $changes_file = 'Changes';
-my $newver = '4.300030';
+my $newver = '5.019';
 my $trial_token = '-TRIAL';
 
 SKIP: {
@@ -1,7 +1,6 @@
 #!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
 use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+use Test::Pod 1.41;
 
 all_pod_files_ok();