<feed xmlns='http://www.w3.org/2005/Atom'>
<title>liberty, branch live-2026-05-25</title>
<subtitle>Bitweaver liberty package repository
</subtitle>
<id>https://git.rdm1.uk/liberty/.git/atom?h=live-2026-05-25</id>
<link rel='self' href='https://git.rdm1.uk/liberty/.git/atom?h=live-2026-05-25'/>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/'/>
<updated>2026-05-25T11:36:14Z</updated>
<entry>
<title>mime.video: fix update returning false when no new upload</title>
<updated>2026-05-25T11:36:14Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-25T11:36:14Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=80d56ac6a0b704c1b480157422227626f63df67d'/>
<id>urn:sha1:80d56ac6a0b704c1b480157422227626f63df67d</id>
<content type='text'>
mime_video_update defaulted $ret=false and only set it true when a
new file was uploaded or aspect meta was present. Saving an image edit
page with an existing video attachment and no new upload always
triggered "There was a problem updating the file settings". Changed
default to true to match mime_image_update which does the same.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>mime.video: drop hardcoded 60s offset, use default throughout</title>
<updated>2026-05-25T11:23:25Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-25T11:23:25Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=78e60870d04782eb04a2278dfaffa429ce157230'/>
<id>urn:sha1:78e60870d04782eb04a2278dfaffa429ce157230</id>
<content type='text'>
Store and update paths were explicitly passing 60s offset to
mime_video_create_thumbnail — clips shorter than that would cause
the ffmpeg fallback to seek past end-of-file and produce nothing.
Now all call sites use the 5s default set in the previous commit.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>mime.video: add timeout guards and fix short-video offset</title>
<updated>2026-05-25T11:02:17Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-25T11:02:17Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=76a8a21a09b5fb59e9840521b713d9947c49db19'/>
<id>urn:sha1:76a8a21a09b5fb59e9840521b713d9947c49db19</id>
<content type='text'>
- Wrap ffmpegthumbnailer and ffmpeg shell_exec calls with timeout 60
  so a hung process doesn't stall gallery-level thumbnail regeneration
- Drop $pOffset default from 60s to 5s so the ffmpeg fallback works
  for clips shorter than one minute

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add generic xref group/source admin pages to liberty</title>
<updated>2026-05-22T14:44:44Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-22T14:44:44Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=572b562f433532429423a5ccace64838efec93c7'/>
<id>urn:sha1:572b562f433532429423a5ccace64838efec93c7</id>
<content type='text'>
LibertyXrefType: add getContentTypeGuids() and getGroupList() static methods.

New admin pages with package filter (session-persisted content_type_guid
dropdown): admin_xref_groups.php manages liberty_xref_type rows;
admin_xref_sources.php manages liberty_xref_source rows. Both support
add and delete (delete guarded by entry/source count). Wired into
menu_liberty_admin.tpl as Xref Groups / Xref Sources links.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add generic xref methods to LibertyContent</title>
<updated>2026-05-22T14:37:03Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-22T14:37:03Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=825ce764d0e6bcdcaccad653a346e03a25cd267f'/>
<id>urn:sha1:825ce764d0e6bcdcaccad653a346e03a25cd267f</id>
<content type='text'>
Moves xref handling up from Contact so any LibertyContent subclass can
use liberty_xref_type/source/xref tables scoped to its own content_type_guid.

Added: getXrefGroupList, getXrefSourceList, getXrefTypeList, getXrefFormatList,
loadXrefTypeList (uses protected $mXrefTypeKey, default 'xref_types'),
loadXrefList, loadXref, storeXref, stepXref. loadXref/storeXref/stepXref use
LibertyXref directly with mContentTypeGuid set before load.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add mContentTypeGuid scoping to LibertyXref for multi-package isolation</title>
<updated>2026-05-22T13:20:29Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-22T13:20:29Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=e0eebe88f2213f65353ec7045a8188738a15f428'/>
<id>urn:sha1:e0eebe88f2213f65353ec7045a8188738a15f428</id>
<content type='text'>
LibertyXref gains a $mContentTypeGuid property (default empty) used to
filter the liberty_xref_source JOIN in load() and the multi-check in
verify(). Subclasses set it to scope queries to their content type without
duplicating any logic.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add liberty_xref package-agnostic cross-reference mechanism</title>
<updated>2026-05-22T06:03:43Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-22T06:03:43Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=e22c4ac772181cd7caab88b349b1ab6ae0ca8eb4'/>
<id>urn:sha1:e22c4ac772181cd7caab88b349b1ab6ae0ca8eb4</id>
<content type='text'>
New tables: liberty_xref_type (text PK, package, sort_order),
liberty_xref_source (package column for direct equality filtering),
liberty_xref (data rows keyed by content_id, works for any package).
Sequence liberty_xref_seq and indices on content_id and package columns.

LibertyXref and LibertyXrefType classes provide the full store/load/step
mechanism. Contact and stock register their own source types against the
shared tables. Upgrade script 5.0.1.php creates the tables on existing installs.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Replace broken video.js player with native HTML5 video element</title>
<updated>2026-05-21T12:45:06Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-21T12:45:06Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=d5b95cfa5cd87bfc21366d7a06836650d6f34cc4'/>
<id>urn:sha1:d5b95cfa5cd87bfc21366d7a06836650d6f34cc4</id>
<content type='text'>
video.js was loading from the unbuilt source directory and required
Flash-era IE workarounds no longer needed. Native &lt;video&gt; with controls
handles playback in all modern browsers. MIME type now taken from
attachment data rather than hardcoded as video/mp4.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Clean up temp pdftotext .txt file after text extraction</title>
<updated>2026-05-21T12:35:54Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-21T12:35:54Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=be38cae07c94f908428abd2a83a1a27bc1913b4f'/>
<id>urn:sha1:be38cae07c94f908428abd2a83a1a27bc1913b4f</id>
<content type='text'>
The extracted .txt file was left in the upload directory after
file_get_contents(). Added unlink() to remove it immediately.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Replace dead magick CLI call in mime_pdf_thumbnail with PHP imagick</title>
<updated>2026-05-21T12:27:10Z</updated>
<author>
<name>Lester Caine</name>
<email>lester@lsces.co.uk</email>
</author>
<published>2026-05-21T12:27:10Z</published>
<link rel='alternate' type='text/html' href='https://git.rdm1.uk/liberty/.git/commit/?id=44962fb7588557a0e81f5f7798c00aa205e478ac'/>
<id>urn:sha1:44962fb7588557a0e81f5f7798c00aa205e478ac</id>
<content type='text'>
shell_exec('which magick') was dead since magick CLI was removed in
favour of the PHP imagick extension. Rewritten to use \Imagick directly
to rasterise the first page of a PDF to JPEG before passing to
liberty_generate_thumbnails. Thumbnail sizes now inherited from global
$gThumbSizes via liberty_generate_thumbnails rather than hardcoded.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
