Revision history for Concierge-Auth

v0.5.2  2026-07-23
    - BREAKING: Concierge::Auth->new's constructor key renamed from
      backend to backend_class, to disambiguate it from the unrelated
      "friendly name" sense of backend used elsewhere in the Concierge
      suite (Concierge::Sessions, Concierge::Users, and the auth/
      sessions/users blocks of a Concierge desk's build config all
      accept a short friendly name like 'pwd'/'database'/'file' under
      backend; Concierge::Auth's own key has always required an
      already-resolved, fully-qualified class name, which backend_class
      now makes explicit). Updated the two internal call sites in the
      core Concierge repo (Concierge.pm and Desk::Setup.pm) accordingly.
    - Removed the 10 stale examples/*.pl scripts (01-basic-authentication.pl
      through 10-architecture-comparison.pl) and their coverage in
      examples/README.md: all called removed methods (checkID/checkPwd/
      setPwd/resetPwd/deleteID) and used the pre-v0.5.0 hashref constructor.
      Archived copies are kept outside this distribution, in the core
      Concierge repo's ZZZ_archive/Concierge-Auth-examples/.
    - Renamed examples/11-custom-backend-ldap.pl to
      examples/1-custom-backend-ldap.pl, now the sole example; rewrote
      examples/README.md to describe just this one script plus a note that
      more examples are planned.
    - Updated MANIFEST to match.

v0.5.1  2026-07-16
    - Base.pm: gen_token/gen_crypt_token now call gen_random_token
      directly instead of going through Generators::gen_token/
      gen_crypt_token, which are themselves just deprecated aliases for
      gen_random_token -- skips the redundant indirection. The method
      names on Base remain deprecated; only the implementation changed.
      Also tightens a Pwd.pm POD cross-reference to Concierge::Auth.
    - Added t/06-io-failures.t and t/lib/MockBuiltins.pm: test coverage
      for open/flock/chmod/unlink failure paths in Pwd.pm via mocked
      CORE::GLOBAL builtins.
    - Added t/05-generators.t coverage for gen_random_string edge cases:
      non-numeric length argument falls back to the default length;
      a whitespace-only charset argument is treated as no charset.
    - Fixed packaging: MANIFEST was missing t/06-io-failures.t and
      t/lib/MockBuiltins.pm.
    - Fixed a spurious "Argument isn't numeric" warning in
      MockBuiltins.pm caused by assigning a string message to $!.
    - Added examples/11-custom-backend-ldap.pl: documentation sketch of
      a directory-backed (LDAP) Concierge::Auth::Base implementation.
    - Fixed a pre-existing podchecker "empty section" warning in
      Base.pm's stacked Generator Methods headings.

v0.5.0  2026-07-05
    - BREAKING: Concierge::Auth is now a thin backend factory, not a
      monolithic password-auth implementation. All prior OO methods
      (confirm/reject/reply, validateID/validatePwd/validateFile,
      checkID/deleteID/checkPwd/setPwd/resetPwd, setFile/rmFile/clearFile,
      encryptPwd, pfile, the gen_* wrappers) are removed outright -- no
      deprecation shims. Code calling Concierge::Auth directly (rather
      than through Concierge.pm) will need to migrate to the new backend
      contract below.
    - Added Concierge::Auth::Base: the domain-level contract every backend
      must implement -- authenticate, is_id_known, enroll,
      change_credentials, revoke (returning { success, message, ... }
      hashrefs) -- plus working default implementations of the Generator
      methods (gen_uuid, gen_random_id, gen_random_token,
      gen_random_string, gen_word_phrase, gen_token, gen_crypt_token),
      inherited for free unless a backend overrides them.
    - Added Concierge::Auth::Pwd: the built-in password-file backend,
      implementing Concierge::Auth::Base on top of the previous
      file-backed primitives (now private to this module).
      Concierge::Auth->new now requires backend => 'Concierge::Auth::Pwd'
      (or another conforming backend class) instead of configuring a
      password file directly.
    - Fixed packaging: MANIFEST and Makefile.PL were missing
      lib/Concierge/Auth/Base.pm and lib/Concierge/Auth/Pwd.pm (both new
      in this release) from PM/provides -- would have shipped a CPAN
      distribution missing required modules.
    - Ported full t/ suite to the new contract; added factory-specific
      coverage (missing backend, unloadable backend class, backend
      constructor failure).

v0.4.5  2026-05-25
    - Fix t/05-generators.t: skip dict-dependent subtest on systems without
      /usr/share/dict/web2 (Linux CPAN tester failure)

v0.4.4  2026-05-25
    - Expand test coverage across all test files

v0.4.3  2026-02-17
    - Version Bump for CPAN

v0.4.2  2026-02-17
    - Further deprecation steps for gen_token and gen_crypt_token

v0.4.3  2026-02-17
    - Removed gen_crypt_token and gen_token from exports, tests, and documentation
    - Removed unused Time::HiRes import from Generators.pm
    - Deprecated subs remain as internal aliases (will be removed in a future release)

v0.4.2  2026-02-17
    - Fixed documentation referring to gen_crypt_token deprecation

v0.4.1  2026-02-17
    - Deprecated gen_crypt_token (now aliases gen_random_token)
    - crypt() is non-portable; returned undef on some CPAN tester platforms

v0.4.0  2026-02-15
    - Fixed distribution issue with MANIFEST.SKIP

v0.3.5 2026-02-14
    - Fix infinite loop in gen_word_phrase when dictionary file unavailable (CI hang)

v0.3.4 2026-02-12
    - Rebuilt tarball with GNU tar (fixes PaxHeader issue on CPAN)

v0.3.3 2026-02-12
    - gen_uuid now generates v4 UUIDs using Crypt::PRNG (no longer shells out to uuidgen)
    - Added gen_random_id for hex-encoded cryptographic random IDs
    - Added generator test suite (t/05-generators.t)

v0.3.2 2026-02-11
    - Corrected dependency list in distro

v0.3.1 2026-02-11
    - Documentation improvements

v0.19.0 2026-02-10
    - Initial CPAN release
    - Argon2 password hashing with Bcrypt legacy validation
    - File-based password storage with file locking
    - Token and random value generation (Concierge::Auth::Generators)
