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

* 0.014  (21 Jul 2012)

  Add logging-related opts LogFormat and LogTimeFormat (cobalt.conf)
  Also some example etc/ cleanups.

  Plugin::RDB; allow for deletion of multiple items via 'rdb del'

  POD updates; documentation for Logger::Output:: classes was old/wrong.


* 0.013  (20 Jul 2012)

  Fully reworked configuration file handling.
  See docs for Bot::Cobalt::Conf for details.
  Incompatible changes:
    - get_core_cfg() now returns a Bot::Cobalt::Conf::File::Core
      Previously returned a HASH.
    - 'PluginOpts' no longer exists. Opts directives specified in 
      plugins.conf will override directives from loaded configuration 
      files.

  Dropped Log::Handler dependency. Logging is now handled by 
  Bot::Cobalt::Logger (and twice as fast per message!)

  Importing Bot::Cobalt::Common will now import 'strictures 1' rather 
  than strict + warnings.
  
  Fix Bot::Cobalt::IRC to be more discerning about Bot_rehash events and 
  triggered autojoin reloads.

  Drop DateTime dependency; strftime() will do.
  
  Explicitly use JSON::XS. Saves some overhead vs. 'use JSON' and 
  performance sucks without it anyway. (We are already pulling in XS 
  bits, so 'eh')

  Plugin::RDB; Revert to strictly random item IDs; hashing is unnecessary 
  overhead. Drops Digest::SHA dependency.
  
  Plugin::RDB; Clean up randstuff timer in _unregister.

  Plugin::Extras::DNS; add simplistic iptohex and hextoip command 
  handlers.

  Core::Role::Singleton; kill is_instanced in favor of Moosey 
  'has_instance'

  Optimized Bot::Cobalt::Utils::rplprintf()


* 0.012  (05 Jul 2012)

  Add Bot::Cobalt::Error exception objects.
  Adds Devel::StackTrace as a dependency.

  Convert Plugin::Auth and Plugin::RDB / Plugin::RDB::Database to 
  make use of Bot::Cobalt::Error.

  Language sets updated to include RDB_ERR_INVALID_NAME
  (Core lang SPEC numbers bumped to 7.)

  Rewrite Bot::Cobalt::Lang, related tests & documentation.

  Largely refactored Plugin::RDB; various bugfixes, no functionality 
  changes.

  Provide core()->rpl method as a frontend to rplprintf.
  Return proper error strings when a specified RPL is missing.

  Provide POE::Component::Client::DNS instance via core()->resolver; 
  share amongst IRC sessions & Plugin::Extras::DNS to save some 
  overhead.

  IRC::Server; provide uppercase()/lowercase() methods making use of 
  available casemap() value.


* 0.011  (30 Jun 2012)

  Fix conflated incoming/outgoing notice events:
   - Outgoing notices still go to 'send_notice' or 'notice'
   - Incoming notices to 'got_notice'

  Bot::Cobalt::Core::Sugar subs are now prototyped.

  Shorter lock retry delays in Bot::Cobalt::DB, Bot::Cobalt::Serializer.
  Also remove 4-arg select() statements in favor of Time::HiRes 
  (Windows doesn't like select-on-undef, I'm told).

  Plugin::RDB bug fix; reset rdb_broadcast timer regardless of whether 
   _select_random() failed.
   
  Plugin::Extras::CPAN; Add 'belongs' command.
  
  Various smaller bugfixes, test expansions, POD cleanups.


* 0.010  (21 Jun 2012)

  Add Bot::Cobalt::Core::Loader, a lightweight module load/unload class,
  and update Bot::Cobalt::Core + Bot::Cobalt::Plugins::PluginMgr to make 
  use of it. Sanitizes previous module load/unload code.

  Bot::Cobalt::Plugin::Auth:
    - Handle configured superusers in context '-ALL'
    - Reloadable
    - Significant cleanups
  
  Bot::Cobalt::IRC::FloodChk; support fractional seconds.

  POD updates, particularly Bot::Cobalt::Manual::Plugins.

  Wide-ranging cleanups, minor optimizations and expanded tests.


* 0.009  (15 Jun 2012)

  Fix RDB.pm bug that would cause log noise on certain command 
  dispatches.
  
  Vaguely improved configuration validation.

  The beginnings of some core / PluginMgr plug load/unload cleanup.


* 0.008  (13 Jun 2012)

  Core configuration accessors no longer return cloned copies of config 
  hashes. This behavior was intended to make it harder for plugins to 
  break core config unintentionally, but it was also unintuitive 
  enough to trip myself up from time to time ;-)
  Return actual references instead.
  
  Bot::Cobalt::Serializer:
    - Drop Logger/LogMethod, always carp/croak/confess
    - Throw proper exceptions on most errors
    - Support writefile() lock retries and timeout

  Bot::Cobalt::IRC refactor and fixes:
    - ircplug_connect & ircplug_disconnect handlers
    - '!server' command handler in IRC::Role::AdminCmds    
    - Move outgoing-to-IRC handlers to IRC::Role::UserEvents
    - Improved disconnect cleanup
    - Improved warnings/logging

  Bot::Cobalt::Utils:
    - support list-style arguments in rplprintf()
    - build %C_* vars for rplprintf at load-time rather than when called 
  
  Plugin::Master; required access levels should've come from PluginOpts
  (rather than Opts, as this plugin doesn't normally have an external cfg)

  Die with stack traces on most errors (confess rather than croak)

  Various syntax / POD / test cleanups.


* 0.007  (06 Jun 2012)
  
  Fix usage help message in Plugin::Extras::CPAN.

  Push missing bin/cobalt2{-installer, -plugin-installcf} portable path 
  fixes. (Uh, oops?)
  
  Add missing test for Frontend::RC.


* 0.006  (05 Jun 2012)

  Fix instance rc files:
    - Kill old-style rcfiles, use YAML like other confs
    - Allow absolute 'BASE' path to be passed in
    - Default to cwd() if not absolute and home directory not available
    - Create portable paths (File::Spec)
  This is an incompatible change; issue an informative error and 
  suggest running `cobalt2-installer` on failure.

  Add Plugin::Extras::CPAN, a simplistic MetaCPAN and Module::CoreList 
  querying plugin.

  Add debug opt to Bot::Cobalt::Conf constructor. Pass our --debug value 
  to Conf as well (in bin/cobalt2 and Plugin::Rehash).

  Bot::Cobalt::Serializer should complain when freeze() or thaw() are 
  given no data.

  Improved ::Core log object handling. Create initial log object at 
  construction-time (not Syndicator start time) and ensure that 
  replacement log objects can handle log methods in use in the core set.
  
  Use Try::Tiny in place of previous block evals and $@ checks.

  Depend on newer POE::Component::Client::HTTP and 
  POE::Component::Resolver. Systems with older Components that happened 
  to grab newer Socket::GetAddrInfo would produce failures due to 
  Socket::GetAddrInfo API changes -- newer POE bits make use of newer 
  Socket.pm and drop the GetAddrInfo dependency entirely.
  ...Not technically "our problem" but this makes my life less annoying 
  on a couple machines :-)

  Some POD improvements and widely expanded tests.

  Drop 'tick' tracker for low-priority timer pool; pretty useless.

  Various small bug/oversight fixes:
   - Conf.pm; catch Serializer failures and report more details
     Related Plugin::Rehash fix to leave current configs untouched on
     read_cfg failures.
   - IRC.pm; more consistent error messages
   - IRC::Event::Nick; fix common() when channels() has changed
   - Explicitly 'use strictures' in IRC::* subclasses
   - Plugin::Auth; log to error() not emerg()


* 0.005  (29 May 2012)

  Fix an IRC.pm bug that would cause failures if an error event was 
  received for a context that never completed a connection.

  Fix Utils.pm bug in glob_* functions that would cause failures when
  operating on an untrue value. Should've been defined() checks.

  POD and test improvements and clean-ups.


* 0.004  (27 May 2012)

  Fix IRC.pm bug that kept sessions hanging about when the bot was 
  terminated via an online command. (This fixes the busted '!die' 
  command from Plugin::Master).
  Also improve shutdown cleanups in Core.

  Code cleanups (no functionality change):
   - Bot::Cobalt::IRC
   - Bot::Cobalt::Utils
   - Significant POD cleanups


* 0.003  (22 May 2012)

  Require perl-5.12.1; given/when changed sometime in there, it seems,
   and I'm tired of playing with EOL Perls anyway.

  Some Plugin::RDB cleanups.


* 0.002

  Fix a couple oversights resulting in test failures:
   - Fix Utils.pm test failures on <perl-5.14
   - Fix Plugin::Auth syntax error on <perl-5.14

  Plugin::RDB:
   - Warn if Info3 seems to be missing

  POD tweaks.


* 0.001

  Initial release of Bot::Cobalt