= 0.12.23 =
* Standardized human-facing Library terminology on “Catalogue” throughout the front-end and WordPress admin interface.

= 0.12.22 =
* Front-end terminology adjustment superseded by 0.12.23.
* No workflow, database, capability, scanner, or MapArc Core contract changes.

= 0.12.21 =
* Fixed the MapArc Dashboard Book Titles card so it no longer references an undefined search variable under WP_DEBUG.
* Removed the redundant role/capability maintenance call from CLIB_Admin::init(); clib_boot() already performs capability maintenance before admin hooks are registered.
* Retains the PHP 8.4 nullable-parameter and translation-timing fixes from 0.12.20.

= 0.12.20 =
* Fixed PHP 8.4 implicit-nullable deprecation in the catalogue title authorization helper.
* Deferred plugin boot from plugins_loaded to init so translated Library labels are not requested before WordPress translation initialization.
* Kept activation translation-free while creating/updating convenience role labels.
* No Library workflow, capability, scanner, catalogue, or MapArc Core contract changes.

= 0.12.16 =
* WordPress.org review remediation: removed distribution temporary-file artifacts.
* Moved Library Staff preset JavaScript out of direct PHP output into an enqueued script.
* Moved QR label print CSS and JavaScript into registered/enqueued assets.
* Replaced inline form/print event handlers with enqueued event listeners.
* Retains the tested 0.12.15 Library inventory, archive, department, and scanner behavior.

= 0.12.15 =
* Active dashboard copy totals now exclude copies whose title is archived and individually archived copies.
* Added copy-level soft archive/restore with active-loan protection.
* Copy/title archive controls are restricted to Head Librarian and Administrator, including server-side handlers.
* Multiple-copy management keeps each Copy ID selectable so staff can choose the exact copy.

= 0.12.13 =
* Fixed editing of legacy Unassigned books whose records point to the hidden default department or a stale department ID.
* Head Librarians and administrators can now open those books in the populated Edit Book form and assign a current department.

= 0.12.12 =
- Issue Book camera scanner now identifies MapArc book-copy versus student/member QR IDs and fills the correct field automatically, regardless of scan order.
- Head Librarians and administrators can edit legacy titles that have no department and assign them to a current department.
- Retains the Safari/iPhone QR compatibility fallback proven in 0.12.11.

0.12.11
- Restored Safari/iPhone Library QR camera decoding fallback while retaining native BarcodeDetector where supported.
- No student registration/password changes.

= 0.12.10 =
* Routed WordPress-admin Edit Book actions through a dedicated edit screen so the selected title reliably opens in edit mode instead of the Add Book form.
* Hardened camera-scanner startup and native barcode format selection, with an in-modal manual/hardware-scanner fallback instead of abruptly closing the camera workflow.
* Student signup/password behavior is unchanged.

= 0.12.8 =
* Department assignment is now automatic on the front Library Desk: a librarian with one assigned department has it applied automatically, while librarians with multiple assignments can choose only among those departments.
* Librarians with no department assignment see an in-Desk guidance message instead of reaching an admin-post error screen during normal book entry.
* Head Librarians can assign staff departments, and their cross-department catalogue authority is enforced server-side through clib_view_staff_activity.

= 0.12.7 =
* Added the required translator guidance for the catalogue total-count placeholder reported by Plugin Check.

= 0.12.6 =
* Catalogue now opens with the book collection already visible in an alphabetically sorted, scrollable list.
* Added instant type-ahead filtering with title-prefix priority and author/ISBN/language fallback matching.
* Removed the Catalogue Search/Clear submit controls; clearing the field restores the collection immediately.

= 0.12.5 =
* Added Memberships Approved to librarian personal activity statistics and Head Librarian Staff Activity reporting.
* Membership approval attribution uses the existing approved_by and approved_at audit fields; no schema migration is required.

= 0.12.4 =
* Reworked the front Library Desk logo into a compact white brand card with tighter header spacing.
* Preserved librarian identity, personal activity stats, catalogue, Head Librarian reporting, and authorization behavior.

= 0.12.3 =
* Cleaned up the front Library Desk hero by removing repeated title/brand text and using a transparent-background MapArc Library logo.
* No schema, capability, circulation, catalogue, staff-statistics, or MapArc Core contract changes.

= 0.12.2 =
* Front Library Desk branding, librarian identity, personal activity stats, searchable catalogue, and Head Librarian staff activity reporting.
* Added clib_view_staff_activity and MapArc Head Librarian convenience role without replacing existing user roles.
* Added created_by attribution for catalogue titles; issue/return staff attribution continues through issued_by/returned_by.

MapArc Library - Historical Changelog

= 0.11.3 =
* Fixed stale verification-email-sent notices remaining visible after the account email is already verified.
* Verification success now takes precedence over resend status, and verified accounts no longer receive a resend-success flag.

= 0.11.2 =
* Email verification links are now presented as a branded "Verify my email" button instead of exposing the token URL as visible email text.
* Verification still uses a single-use, expiring token; successful verification immediately redirects to the clean My Library profile URL.
* Resending verification replaces the stored token hash, invalidating the previous verification link.

= 0.11.1 =
* Added a visible Send/Resend verification email action to the student Library Profile before membership exists.
* Email verification now precedes Library profile submission when verification is enabled.
* Added server-side verification gates for profile submission, Raise Token, and book issue, including legacy-approved members.
* Improved student verification status, success/error messaging, and locked-profile guidance.

= 0.11.0 =
* Added MapArc logo-derived visual theme and bundled Library logo asset.
* Added Department classification with administrator-managed departments and multi-department librarian assignments.
* Catalogue managers are restricted to adding and managing titles in their assigned departments; administrators retain Library-wide access.
* Added student Raise Token reservation queue for lent-out titles, queue position, tentative availability, ready-for-collection window, cancellation, and automatic fulfilment on issue.
* Added token-demand analytics by title and department.
* Existing titles migrate safely to the Unassigned department.

= 0.10.3 =
* Hardened email-service SQL call sites for WordPress Plugin Check static analysis.
* Removed intermediate prepared-query variables from notification update and scheduled-loan queries.


= 0.10.2 =
* Plugin Check cleanup: use directly sanitized read-only query values and literal prepared SQL templates for email notification state and reminder queries.

= 0.10.1 =
* Plugin Check hardening: read-only request handling annotations, input sanitization, translation comments, and SQL/static-analysis cleanup.


= 0.10.0 =
* Rebranded the human-facing product as MapArc Library while preserving established Library database tables, capabilities, role slug, shortcodes, admin URLs, hooks, options, metadata, cron identity, and QR compatibility.
* Added permanent MapArc Core product identity `maparc-library` using the Core 0.7.0 API 1 product-registration contract.
* Added a personal-only Library section to MapArc Core My Activity when the account-section registry is available.
* Added read-only MapArc Core diagnostics for product registration, My Activity registration, schema version, and required Library capability bundles.
* Rebranded the legacy `commons_librarian` convenience role label to MapArc Librarian without changing the persisted role slug or replacing user roles.
* Updated Library staff login routing so explicit WordPress or MapArc redirect destinations are respected.
* MapArc Core remains optional and standalone WordPress identity/authentication continues to work when Core is inactive.
* The physical plugin folder, text domain, shortcodes, database tables, and other established identifiers intentionally remain legacy-compatible in this upgrade line so existing installations can update safely.

= 0.9.3 =
* Split circulation into separate Issue Book and Return Book tabs in both WordPress admin and the frontend Librarian Desk.
* Return Book requires only the physical-copy identifier; the active borrower is resolved from the loan.
* Added student email ownership verification using single-use, 24-hour verification links with hashed token storage.
* Librarian membership approval can require a verified account email, and Membership Requests now shows verification status.
* Added optional institutional email-domain restriction.
* Added administrator-only Library Email Settings for sender identity, notification controls, editable subjects/messages, and placeholders; SMTP credentials remain outside MapArc Library.
* Added a Send Test Email control for checking WordPress mail handoff.
* Added immediate book-issued emails plus optional pre-due, due-date, and one-time overdue reminders.
* Added hourly WordPress cron processing and per-loan sent markers to prevent duplicate scheduled reminders.

= 0.9.2 =
* Replaced long public Library identifiers with one canonical, permanent short ID per entity: C-000001 for copies and M-000001 for members.
* New copy and member QR codes encode the exact same short ID that staff see and type manually.
* Short IDs automatically grow beyond six digits as the Library grows; no format migration is needed.
* Existing pre-1.0.0 QR values remain accepted as a backward-compatibility path, while all newly rendered QR codes use the canonical short IDs.
* Removed the duplicate global Add Physical Copy block from Copies & QR.
* Added searchable Manage Existing Copies workflow supporting title, author, ISBN, Library Copy ID, and existing barcode.
* Physical copies are shown only after one book is deliberately opened, and each QR remains hidden until View QR is clicked.
* Add Another Copy now appears inside the selected book workflow.
* Individual and bulk printed labels now print the canonical Library Copy ID prominently beneath the QR for manual computer entry.
* The post-book-creation admin screen no longer renders all new copy QR codes automatically.


= 0.9.1 =
* Fixed the Copies & QR screen so physical-copy QR codes are never rendered in the page grid by default.
* Staff must first select one book title before its physical copies are shown.
* Even after selecting a book, each QR remains hidden until View QR is clicked for the exact physical copy.
* Added an explicit No Book Selected safety state and Choose Another Book control.
* Applied the same safer selection flow to both the frontend Librarian Desk and WordPress admin Copies & QR screen.


= 0.9.0 =
* Added an administrator-only Library Analytics screen in the WordPress console.
* Added multi-field analytics toggles remembered separately for each Administrator account.
* Added date presets for Today, Last 7 days, Last 30 days, This month, This year, and custom date ranges.
* Added selectable metrics for titles, copies, availability, active/overdue loans, memberships, loans issued, returns, and membership applications.
* Added Most Borrowed Books, Language Distribution, Semester-wise Members, and Daily Circulation analytics.
* Analytics uses aggregate Library data and does not expose borrower identities in rankings.
* Added an Analytics shortcut to the Library admin Dashboard for WordPress Administrators.


= 0.8.0 =
* Catalogue book titles now open a Book Details view before any physical-copy QR is shown.
* Book Details lists each physical copy separately with Library Copy ID, location, status, View QR, Print Label, and Edit Copy controls.
* Added a confirmation QR modal so librarians explicitly choose the exact physical copy before displaying its QR.
* Copies & QR screens now hide QR images until View QR is clicked, reducing accidental use of the wrong copy code.
* Add Another Copy from Book Details preselects the correct catalog title.
* Added mobile camera scanning fallback for generated Library QR codes on Safari/iPhone and other browsers without BarcodeDetector.
* Native BarcodeDetector remains preferred where available for QR and 1D barcode scanning.
* QR-only fallback uses jsQR 1.4.0 on demand; ISBN/EAN scanning on browsers without a native decoder still requires manual entry or a hardware scanner.


= 0.7.0 =
* Added Edit Book in both wp-admin Catalogue and the frontend Librarian Desk.
* Librarians can update title, author, ISBN-10/13, publisher, language, and publication year without changing existing copy QR identities.
* Added soft Archive Book workflow so catalogue records and loan history are preserved instead of destructively deleting established books.
* Added Edit Copy for shelf/location, existing barcode, condition, and availability state.
* Library Copy ID and QR identity remain permanent when copy metadata changes.
* Added safe Delete Unused Copy action; copies with any borrowing history cannot be deleted.
* Rebuilt Copies & QR cards as vertical cards so QR codes, long titles, locations, and metadata no longer compete for horizontal space.
* Added prominent Library Copy ID and individual Print QR Label controls to each copy card.
* Archived titles are excluded from normal librarian/student catalogue browsing.


= 0.6.2 =
* Library staff now land on the frontend Librarian Desk after normal login; wp-admin Library Dashboard remains available as the administrative console.
* Added public Library Copy IDs (CLIB-C-XXXXXXXX) while preserving opaque QR payloads.
* Added public Library Member IDs (CLIB-M-XXXXXXXX) for approved students while preserving opaque student QR payloads.
* Library Copy IDs and Member IDs can be entered manually in issue/return workflows as scanner fallbacks.
* Redesigned printed QR labels with the QR above the title and a clear human-readable Library Copy ID beneath it.
* Improved copy cards so long book titles no longer compete with oversized side-by-side label metadata.
* Improved scanner fallback messaging for browsers without the native BarcodeDetector API.


= 0.6.1 =
* Fixed post-login routing for users with MapArc Library staff capabilities.
* Library staff now land on the wp-admin Library Dashboard instead of the borrower/student dashboard after normal login.
* Explicit frontend Librarian Desk sign-in still returns to the Librarian Desk.
* Personal My Library remains available to staff users for their own borrowing activity.


= 0.6.0 =
* Added Library Staff management for existing WordPress users.
* Added Full Librarian, Circulation Staff, and Catalogue Manager presets backed by Library capabilities.
* Staff assignments use direct Library-owned user capabilities and preserve LMS, Quiz, Core, and other WordPress roles/capabilities.
* Added capability whitelist, nonce protection, target-user validation, and administrator inheritance protection.
* Added user search using WP_User_Query and a bounded current-staff listing.
* Added commons_library_staff_permissions_updated action for future auditing integrations.


= 0.5.1 =
* Added a dedicated wp-admin Library Dashboard as the main Library landing page.
* Dashboard shows capability-aware membership, catalog, copy, active-loan, available-copy, and overdue-loan metrics.
* Added quick actions for issue, return, add book, copies/QR, bulk labels, and membership requests.
* Added a current-circulation summary for staff allowed to view loans.
* Moved Issue & Return to its own admin submenu while preserving the frontend Librarian Desk.


= 0.5.0 =
* Reworked Library staff authorization around WordPress capabilities rather than role identity.
* Split legacy clib_manage_circulation into clib_issue_items and clib_return_items.
* Kept commons_librarian as a convenience role bundle while allowing Library capabilities to coexist with LMS, Quiz, and other product capabilities on the same WordPress user.
* Added idempotent authorization migration for administrators, Library roles, custom roles, and direct user capability grants.
* Librarian Desk access now works for limited staff such as issue-only, return-only, catalog-only, or membership-management users.
* Current-loan visibility remains separately controlled by clib_view_circulation.


= 0.4.3 =
* WordPress Plugin Check compliance cleanup.
* Bundled QRCode.js locally instead of loading it from a remote CDN.
* Added GPL-compatible license metadata and the translations directory.
* Reworked custom-table SQL to use prepared identifier placeholders.
* Added translator guidance for strings containing placeholders.
* Tightened output handling while preserving Library membership, circulation, and QR workflows.


= 0.4.1 =
* Student catalog shows Lent out with the earliest expected return date when no copy is available.


= 0.4.0 =
* Added approval-based Library membership.
* Students must submit Semester, College ID, and Phone Number before QR activation.
* Added librarian Membership Requests dashboard with pending notifications, approval, and rejection.
* Student QR identifiers are now generated/shown only for approved Library memberships.
* Added student navigation for Catalogue, My Borrowing, History, and Library Profile/My QR.
* Removed the duplicate My Library heading on the standalone student page while retaining it inside MapArc Core.


= 0.3.5 =
* Added student catalogue browsing/search with availability and language filtering.
* Added borrowing history to the student Library interface.
* Expanded MapArc Core My Activity Library into a full student-facing Library experience.

= 0.3.4 =
* Added Book Language to Add Book in both the frontend Librarian Desk and wp-admin.
* Stores language as title-level catalogue metadata and preserves existing records during migration.
* Added Language to catalogue listings and catalogue search.

= 0.3.3 =
* Added a visible Sign in button for logged-out visitors on the frontend Library Desk.
* The login redirects back to the Library Desk after successful authentication.
* Added the same Sign in and return flow to the frontend My Library student profile.

= 0.3.2 =
* Removed the duplicate Librarian Desk heading from the frontend Library Desk header.
* The WordPress page title is now the single primary page heading while the plugin header keeps the MapArc Library label, description, and 5-day loan badge.

= 0.3.1 =
* Integrated physical-copy creation directly into Add Book.
* Add Book can create 1-100 physical copies in one batch.
* Every created copy immediately receives a unique Library QR.
* Added post-save QR preview for all newly created copies.
* Added Print This QR and Print All Created Labels actions.
* Added shared location and optional single-copy existing barcode fields to Add Book.

= 0.3.0 =
* Added protected frontend Librarian Desk shortcode `[commons_library_desk]`.
* Added frontend Issue/Return, Catalogue, Copies & QR, and Bulk QR Labels views.
* Automatically provisions Library Desk and My Library pages when missing.
* Keeps wp-admin Library screens as an administrative fallback.

= 0.2.2 =
* Added Bulk QR Labels with date, title, status, location, and print-status filters.
* Added printer-friendly copy QR sheets and print tracking.

= 0.2.1 =
* Set the default loan period to 5 days.
* Added dedicated Librarian Desk navigation.

= 0.2.0 =
* Added librarian circulation UI, student QR profiles, issue/return lifecycle, and QR workflows.

= 0.1.0 =
* Initial architecture foundation with title and copy custom tables.

0.12.17
--------
* Matched readme.txt Stable tag to the plugin header version for WordPress.org Plugin Check.
* Preserved scanner-independent MapArc QR routing in Issue Book: student/member and book-copy QR codes are detected and routed to the correct field regardless of which Scan button opened the camera.
* Retained the WordPress.org enqueue fixes introduced in 0.12.16.


0.12.18
--------
* Bundled jsQR 1.4.0 locally under assets/vendor/jsqr and removed the runtime jsDelivr executable dependency.
* Added the Apache-2.0 license text and updated third-party notices for the bundled decoder.
* Preserved scanner-independent student/member vs book-copy QR auto-routing and the confirmed iPhone/Safari QR fallback.
* Matched the plugin header and readme Stable tag at 0.12.18.
