> For the complete documentation index, see [llms.txt](https://docs.libnova.com/libnova/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.libnova.com/libnova/what-changed-recently/libsafe-v1.4.0-whats-new-december-2025.md).

# Libsafe v1.4.0 – What's New (December 2025)

<table><thead><tr><th width="280">Release date</th><th>Version</th></tr></thead><tbody><tr><td>22 / December/ 2025</td><td>v.1.4.0</td></tr></tbody></table>

### What's new at a glance <a href="#whats-new-at-a-glance" id="whats-new-at-a-glance"></a>

<table><thead><tr><th width="280">Area</th><th>What changed</th></tr></thead><tbody><tr><td><a href="#id-1.-collections-interface-ocfl-archive-search-is-now-live">Collections Interface – OCFL search</a></td><td>The archive search in Collections Interface is now fully functional, connected to the OpenSearch index and returning real results.</td></tr><tr><td><a href="#id-2.-collections-interface-file-creation-date-in-search-results">Collections Interface – creation date in results</a></td><td>Search results now include the file creation date, enabling sorting and filtering by date.</td></tr><tr><td><a href="#id-3.-structure-editor-comprehensive-keyboard-and-screen-reader-accessibility-wcag-2.1-aa">Structure Editor – keyboard navigation (WCAG 2.2 AA)</a></td><td>The folder tree, action buttons, context menu, Attach File modal, and Sequential Numbering modal are now fully operable by keyboard and screen reader.</td></tr><tr><td><a href="#bug-fixes">Navigation bar in Configuration</a></td><td>The breadcrumb navigation bar now works correctly within all Configuration sections.</td></tr><tr><td><a href="#bug-fixes">PREMIS events display</a></td><td>PREMIS events for ingested files are now shown correctly in the file properties panel.</td></tr><tr><td><a href="#bug-fixes">File thumbnails</a></td><td>Thumbnails are now generated and displayed correctly for ingested files.</td></tr><tr><td><a href="#bug-fixes">Copy / Move function</a></td><td>The Move/Copy files function now executes correctly and no longer gets stuck in Waiting or fails.</td></tr><tr><td><a href="#bug-fixes">Change storage class (re-freeze)</a></td><td>Files can now be moved back to Cold storage after being re-ingested, which previously returned an error.</td></tr><tr><td><a href="#bug-fixes">MD5 manifest creation</a></td><td>The Create MD5 Manifest function now completes correctly instead of remaining stuck in Waiting.</td></tr><tr><td><a href="#bug-fixes">Advanced Search filters</a></td><td>Filters in Advanced Search are no longer lost after applying a search.</td></tr><tr><td><a href="#bug-fixes">PHP updated to 8.3.24</a></td><td>The platform runtime has been updated for improved security and performance.</td></tr><tr><td><a href="#bug-fixes">Additional bug fixes</a></td><td>Several issues fixed across containers, ingestion processes, PREMIS events, and permissions.</td></tr></tbody></table>

***

## New features and improvements <a href="#new-features-and-improvements" id="new-features-and-improvements"></a>

### Collections Interface – OCFL archive search is now live <a href="#id-1.-collections-interface-ocfl-archive-search-is-now-live" id="id-1.-collections-interface-ocfl-archive-search-is-now-live"></a>

The search functionality within the OCFL archive (Collections Interface) is now fully operational. Previously, the search screen was available but did not return results. It is now connected to the underlying OpenSearch index, which is populated each time objects are archived, and returns real search results.

#### **What you can search**

When performing a search in the archive, you can filter results by type and choose which fields to search across:

* **Search objects** — returns archived objects (top-level entries).
* **Search files** — returns individual files within archived objects.
* **Search all** — returns both objects and files.

For each search type, you can specify which fields to match against:

* Administrative metadata (descriptive metadata associated with the object).
* Technical (embedded) metadata extracted from the files.
* Source path (the original location of the file or object).
* Full-text content (text extracted from document files).

#### **Search results**

Each result shows the OCFL object identifier, the type (object or file), the source path, the file size (for files), the format identifier, the list of versions in which the item exists, and the source container. Results are paginated.

The search index is built and updated automatically during the archiving process. Objects archived before v1.4.0 may not appear in search results until they are re-archived or the index is rebuilt. Please contact your administrator if you cannot find expected content.

***

### Collections Interface – file creation date in search results <a href="#id-2.-collections-interface-file-creation-date-in-search-results" id="id-2.-collections-interface-file-creation-date-in-search-results"></a>

The creation date of each file (**date\_create**) is now included in OCFL archive search results. This allows managers and users to identify when a file was first archived and to distinguish between multiple versions of the same object by creation timestamp.

***

### Structure Editor – comprehensive keyboard and screen reader accessibility (WCAG 2.2 AA) <a href="#id-3.-structure-editor-comprehensive-keyboard-and-screen-reader-accessibility-wcag-2.1-aa" id="id-3.-structure-editor-comprehensive-keyboard-and-screen-reader-accessibility-wcag-2.1-aa"></a>

Version 1.4.0 delivers a significant accessibility update to the Structure Editor, making it fully operable by keyboard and compatible with screen readers. The following areas have been improved:

#### **Folder tree and action buttons**

The folder tree in the Structure Editor and all associated action buttons (Add Node, Add Page, up/down navigation arrows) are now reachable via Tab / Shift+Tab. Screen readers announce the name, hierarchical level, and expanded/collapsed state of each folder. Each arrow button has a descriptive label so screen readers announce the action and affected node (for example, "Move page up"). After a move action, the new position in the hierarchy is announced.

#### **Context menu for folders**

The right-click context menu that appears on each folder node can now be activated by keyboard (Enter, Space, or Shift+F10 depending on the element). The menu can be navigated with the up/down arrow keys, each option is announced by screen readers, and pressing Escape closes the menu and returns focus to the folder that opened it.

#### **Attach File modal**

The Attach File modal now manages focus correctly: when it opens, focus is placed on the first interactive element; when it closes, focus returns to the Attach File button. The close (X) button has an accessible label. Focus is trapped inside the modal while it is open, preventing it from escaping to background elements. The file folder tree inside the modal is navigable by keyboard using arrows to expand/collapse folders and Enter or Space to select items.

#### **Sequential Numbering modal**

All controls in the Sequential Numbering modal — buttons, the Page Number Format selector, and text fields — now have visible focus styles with sufficient colour contrast. The Page Number Format dropdown announces its current state and each option when navigating. Text fields have accessible labels so screen readers announce their purpose.

#### **Node Type combo box**

The Node Type selector used when adding a new node is now fully accessible to screen readers. All options are announced when navigating, the expanded/closed state is communicated, and keyboard navigation (arrows, Enter, Escape) works as expected.

These accessibility improvements meet WCAG 2.1 Level AA requirements. They cover keyboard navigation (2.1.1), no keyboard traps (2.1.2), focus visibility (2.4.7), name/role/value (4.1.2), and colour contrast for non-text elements (1.4.11).

***

## Bug fixes <a href="#bug-fixes" id="bug-fixes"></a>

<table><thead><tr><th width="280">Area</th><th>What was fixed</th></tr></thead><tbody><tr><td>Navigation bar in Configuration</td><td>The breadcrumb navigation bar within the Configuration section did not respond to clicks (for example, clicking "Configuration" to go back). Navigation now works correctly in all Configuration sub-sections.</td></tr><tr><td>PREMIS events not displayed</td><td>After ingesting files, no PREMIS events were shown in the file properties panel. PREMIS events are now displayed correctly for all ingested files.</td></tr><tr><td>File thumbnails not displayed</td><td>Thumbnails were not generated or shown for ingested files. Thumbnails are now created and displayed correctly after ingestion.</td></tr><tr><td>Copy / Move function failing or stuck in Waiting</td><td>The Move/Copy files function either failed immediately or remained stuck in "Waiting" state indefinitely. Both issues are resolved; the function now executes and completes correctly.</td></tr><tr><td>Change storage class (re-freeze) error</td><td>After a file was moved to Cold storage, re-ingested, and then a second change to Cold was attempted, the operation returned an error and did not complete. Files can now be moved back to Cold storage after re-ingestion.</td></tr><tr><td>MD5 manifest creation stuck in Waiting</td><td>The Create MD5 Manifest function remained in "Waiting" state without completing. The function now runs and finishes correctly.</td></tr><tr><td>Advanced Search filters disappearing</td><td>Filters applied in Advanced Search were lost after executing the search, requiring users to re-enter them. Filters are now retained after a search is performed.</td></tr><tr><td>Structure Editor – screen reader announcing wrong position after node move</td><td>When using a screen reader and moving a node or page up or down, the narrator announced the action but did not announce the new position in the hierarchy. The new position is now announced correctly.</td></tr><tr><td>Structure Editor – narrator reading entire page on Add Page</td><td>When a screen reader was active and a new page was created in the Structure Editor, the narrator started reading the entire screen instead of focusing on the new content. The narrator now announces only the relevant new content.</td></tr><tr><td>Structure Editor – focus lost on return to folder tree</td><td>After navigating out of the folder tree (Shift+Tab) and returning to it, the focus landed on the scroll bar instead of the last selected element, requiring an additional Enter press to resume keyboard navigation. Focus is now restored correctly to the selected element on re-entry.</td></tr><tr><td>Containers stuck in Busy state</td><td>Multiple containers remained in "Busy" state indefinitely even when no active processes were running. The underlying cause has been resolved and containers now return to their correct state when all processes complete.</td></tr><tr><td>S3 permissions for non-admin users</td><td>Non-admin users were being granted full S3 permissions instead of the scoped permissions corresponding to their role. Permission assignment is now correctly scoped to the containers each user has access to.</td></tr></tbody></table>

***

## Summary of changes by role <a href="#summary-of-changes-by-role" id="summary-of-changes-by-role"></a>

<table><thead><tr><th width="280">Role</th><th>Key changes to be aware of</th></tr></thead><tbody><tr><td><strong>End user</strong></td><td>PREMIS events and thumbnails now display correctly after ingestion; Advanced Search filters are retained; Structure Editor is fully accessible by keyboard.</td></tr><tr><td><strong>Administrator</strong></td><td>Navigation bar in Configuration works correctly; S3 permissions for non-admin users are correctly scoped; containers no longer get stuck in Busy state.</td></tr><tr><td><strong>Compliance / Audit</strong></td><td>PREMIS events are now reliable and visible; OCFL archive search returns real results including file creation dates.</td></tr><tr><td><strong>Operations</strong></td><td>Copy/Move, Change storage class (re-freeze), and MD5 manifest functions work correctly; PHP updated to 8.3.24.</td></tr></tbody></table>
