Revision history for Concierge

v0.9.0  2026-07-05
    - BREAKING: Auth backend is now selected via a friendly name resolved
      through Desk::Setup's %AUTH_BACKENDS catalog, matching the 5-verb
      contract introduced in Concierge::Auth v0.5.0. Desks built before
      this change (bare auth_file, no auth_backend/auth_args in
      concierge.conf) will fail at open_desk() -- there is no migration
      path or fallback; affected desks must be rebuilt via
      build_desk()/build_quick_desk(). Requires Concierge::Auth >= 0.5.0
      (bumped in PREREQ_PM); running against an older Concierge::Auth
      will fail outright since it no longer has the backend factory.
    - open_desk(): instantiating the configured Auth backend is now
      wrapped so failures return gracefully instead of croaking. A
      pre-v0.5 desk (missing auth_backend) gets a specific
      { success => 0, message => '...' } explaining that the desk must
      be rebuilt, that rebuilding will archive existing user data but
      delete session/credential storage and install the default
      built-in ID-password auth system, and pointing at the POD for
      alternative auth approaches. Any other backend init failure (bad
      backend name, backend constructor error) returns a generic
      wrapped { success => 0, message => "Failed to initialize auth
      backend: ..." } instead of propagating the croak.
    - Desk::Setup: added %AUTH_BACKENDS catalog (currently 'pwd' ->
      Concierge::Auth::Pwd); build_desk() and validate_setup_config()
      resolve/validate auth.backend through it. Documented (POD +
      commented-out catalog entries) that additional backends -- e.g.
      OAuth, SAML, or a non-Concierge::-namespaced class -- can be added
      as one-entry additions; the backend class is not required to live
      under the Concierge:: namespace.
    - Concierge.pm: six call sites (add_user, remove_user, verify_user,
      login_user, verify_password, reset_password) converted from the
      old Auth primitives to the new authenticate/is_id_known/enroll/
      change_credentials/revoke verbs.
    - Fixed three call sites (admit_visitor, checkin_guest,
      Desk::User::enable_user) that called Concierge::Auth as a class
      method for ID generation -- broken outright under the new factory,
      which has no class methods; now call the configured backend
      instance or Concierge::Auth::Generators directly.
    - BREAKING: Desk::Setup's build_desk() config is reshaped: the
      former storage => { base_dir, sessions_dir, users_dir, auth_dir }
      block is gone. base_dir is now a top-level setting (it was the
      only entry left in storage once each component's own directory
      moved into its own block), and each component's storage location
      is a 'dir' setting within that component's own block (auth.dir,
      sessions.dir, users.dir), keeping location and backend settings
      together per component instead of split across two structures.
      Each 'dir' defaults to the top-level base_dir if omitted; a
      relative 'dir' is resolved *against* base_dir (so it moves along
      with it), while an absolute 'dir' is used as-is, letting a
      component's storage live entirely outside the rest of the desk
      (e.g. a more restrictively permissioned location for the 'pwd'
      backend's password file). auth.file remains a filename only
      (default 'auth.pwd' for 'pwd'), never a path -- previously an
      explicit path in auth.file that was given relative to '.' could
      silently end up outside the desk directory once base_dir '.'/
      './' was normalized to './desk'; naming (file) and location
      (dir) are now fully independent, and passing a full path in
      auth.file is no longer supported.

v0.8.4  2026-06-05
    - Desk::Setup POD: add UI Formatting Hints section documenting format_as
      with template example using app-native tokens (t/b/sel)
    - Desk::Setup POD: add format_as to field attribute reference
    - Desk::Setup POD: fix field table -- move last_login_date from standard
      to system fields; fix standard count 12 -> 11; fix Complete Example
      system count 2 -> 3, total 15 -> 16
    - Desk::Setup POD: update get_field_hints() return comment to include
      format_as

v0.8.3  2026-06-01
    - Fix MANIFEST: remove .perl-version (file does not exist in repo,
      causing CPAN Testers MANIFEST mismatch error)
    - Add .perl-version to MANIFEST.SKIP to prevent recurrence
    - Fix POD VERSION sections in all four modules (were stale at v0.8.1)

v0.8.2  2026-05-31
    - Fix version consistency: update Makefile.PL provides section to v0.8.2
      (was not updated when modules were bumped from v0.8.0 to v0.8.1)

v0.8.1  2026-05-27
    - Desk::Setup POD: update show_default_config/show_config examples and
      prose to reflect service-hashref returns (Concierge::Users v0.8.3);
      add validate_as, default, null to get_field_hints return-value comment

v0.8.0  2026-05-25
    - Rename Concierge::Setup, ::User, ::Base into Concierge::Desk:: namespace
      (Concierge::Desk::Setup, ::User, ::Base)
    - Resolves visual ambiguity between Concierge::User (object) and
      Concierge::Users (data-store component) in the installed library tree

v0.7.2  2026-05-25
    - Add "What the Suite Provides" section to DESCRIPTION in Concierge.pm
    - Expand README.md into a full suite overview (components, lifecycle,
      backends, field schema, return values, extensibility, installation)

v0.7.1  2026-05-25
    - Fix POD rendering: C<{ ... }> → C<< { ... } >> in EXTENSIBILITY section
    - Expand Return Values documentation with per-method-category field list
    - Add Password Operations intro clarifying add_user() handles registration

v0.7.0  2026-05-21
    - Added Concierge::Desk::Base: records-store base class for custom components
    - Added EXTENSIBILITY POD section to Concierge.pm (component substitution
      API, additional component pattern, future components, contributor invitation)
    - Updated README.md

v0.6.1  2026-02-15
    - POD version number updating issue

v0.6.0  2026-02-15
    - Update and corrections to POD

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

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

v0.5.6 2026-02-13
    - Fixed CPAN testers build failure: require Params::Filter 0.014
      (earlier versions do not export make_filter)

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

v0.5.4 2026-02-12
    - Fixed CPAN testers timeout failure on Windows: session expiry in
      installation tests now mocked via direct SQLite update (no sleep).
      Real-time timeout tests moved to xt/ (author tests only).

v0.5.3 2026-02-12
    - Updated docs: session IDs are now random hex strings, not UUIDs
      (reflects Concierge::Sessions v0.8.5 security improvement)

v0.5.2 2026-02-11
    - Corrected production of tar file