Revision history for Concierge-Users v0.9.4 2026-07-23 - BREAKING: Concierge::Users->setup's configuration key renamed from backend to backend_class, to disambiguate it from the unrelated "friendly name" sense of backend used elsewhere in the Concierge suite (a desk's build config still accepts a short friendly name like 'database'/'file'/'yaml' under backend; Concierge::Users's own key now requires an already-resolved, fully-qualified class name, matching Concierge::Auth's and Concierge::Sessions's backend_class). Removed the friendly-name-to-class ternary and its database|file|yaml validation. - Updated README, POD, and tests to use backend_class throughout. - BREAKING: Renamed Concierge::Users::Database to Concierge::Users::SQLite. The old name implied a generic, swappable database backend, but the implementation is (and always was) SQLite-specific via DBI/DBD::SQLite -- there is no abstraction over other RDBMSes. The new name matches Concierge::Sessions::SQLite's existing convention and is honest about what the class does. The 'database' friendly name at the desk-config layer (Concierge::Desk::Setup's %USERS_BACKENDS catalog) is unaffected and still resolves to this module, just under its new class name. v0.9.3 2026-07-16 - Meta.pm: remove 'required' flag from the created_date system field. It is set internally by the service layer, not collected from user input, so callers consulting field hints should not be told it is required. v0.9.2 2026-06-08 - Remove 'system' attribute entirely: drop from field definitions, get_field_hints(), config_to_yaml() YAML output, POD, __DATA__ template, and tests; system fields are identifiable via user_system_fields() or field name - Fix Field Overrides POD: add last_login_date to protected fields list - Fix user_system_fields POD: add last_login_date to listed return values - Fix README version (was stale at v0.7.1) - Fix config_to_yaml() show_config() bug: format_as was omitted from generated YAML (v0.9.1 fix, documented here) - Fix init_field_meta() protection logic: last_login_date added to protected field set; format_as and label now pass through on all protected fields without warning (v0.9.1 fix, documented here) v0.9.1 2026-06-05 - Add format_as test coverage to t/06-field-metadata.t: built-in convention values, app-supplied tokens via app_fields, field_overrides pass-through, and missing format_as returns undef v0.9.0 2026-06-05 - get_field_hints: add format_as to returned hashref - Add format_as property to all built-in field definitions (core, standard, system); enum fields use 'options', others use the type-appropriate convention (text, boolean, date, datetime) - format_as is not validated by Concierge; apps may supply their own native format codes via app_fields or field_overrides during setup and retrieve them unchanged via get_field_hints() - Conventional format_as values: text, options, boolean, number, date, datetime, time - Fix stale POD VERSION sections in Database, File, and YAML backends (were v0.8.2, now in sync at v0.9.0) v0.8.5 2026-05-31 - Refactor: replace field_use => 'system' with system => 1 boolean on last_mod_date and created_date; remove field_use => 'identity' from user_id (identity field identified by name only) - Move last_login_date from Standard Fields (12) to System Fields (3); system fields bypass validation - get_field_hints: returns system => 1/0 for all fields - config_to_yaml: emits system: 1 instead of field_use: system v0.8.4 2026-05-31 - Fix version consistency: bump Database, File, and YAML backend modules to v0.8.4 (were not bumped during v0.8.3 release) - Update Makefile.PL provides section to v0.8.4 v0.8.3 2026-05-27 - get_field_hints: add default, null, and validate_as to returned hashref; document required semantics (service-layer, not app-level conditional) - Enum options: support value:Label syntax; v_options and default detection strip :Label suffix to extract bare stored value - show_default_config / show_config: return service hashrefs { success, config, ... } instead of printing to STDOUT - Separate data type from operational role: user_id type=>text + field_use=>identity; last_mod_date / created_date type=>timestamp + field_use=>system - Add %Concierge::Users::Meta::field_types with the eight canonical data types; moniker and name remain in type_validator_map as validate_as targets only - config_to_yaml: emit field_use when present - __DATA__: fix inconsistent tab indentation on validate_as lines v0.8.2 2026-05-25 - Replace real personal data in examples/__DATA__ with mock data (fictional names, 555- phone numbers, @example.com addresses) v0.8.1 2026-05-25 - Expand test coverage across all test files v0.8.0 2026-02-15 - Fixed distribution issue with MANIFEST.SKIP v0.7.4 2026-02-12 - Rebuilt tarball with GNU tar (fixes PaxHeader issue on CPAN) v0.7.1 2026-02-12 - Fixed use of Capture::Tiny in tests v0.7.1 2026-02-11 - Documentation fixes: include_standard_fields default behavior, core enum override via field_overrides - Moved scalability benchmarks to xt/ author tests v0.7.0 2026-02-11 - Initial release to CPAN - SQLite, CSV/TSV, and YAML storage backends - Field validation with multiple validators (email, phone, date, timestamp, boolean, enum, moniker, name) - Field overrides and custom application fields - Automatic data archiving on re-setup - Service layer pattern with structured hashref returns - Comprehensive test suite (115 tests) v0.7.2 2026-02-11 - Improved documentation