<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" 
	>
<channel>
	<title>
	Comments on: LH Private Uploads	</title>
	<atom:link href="https://lhero.org/portfolio/lh-private-uploads/feed/" rel="self" type="application/rss+xml" />
	<link>https://lhero.org/portfolio/lh-private-uploads/</link>
	<description>Digital Sovereignty for everyone</description>
	<lastBuildDate>Sun, 01 Nov 2026 06:33:11 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>
		By: Peter Shaw		</title>
		<link>https://lhero.org/portfolio/lh-private-uploads/#comment-1537834</link>

		<dc:creator><![CDATA[Peter Shaw]]></dc:creator>
		<pubDate>Sun, 01 Nov 2026 06:33:11 +0000</pubDate>
		<guid isPermaLink="false">https://lhero.org/?post_type=lh-portfolio&#038;p=152640#comment-1537834</guid>

					<description><![CDATA[Private media can now be made from plain-text files (CSV, TSV, TXT, Markdown, JSON, iCalendar and vCard) even where the network&#039;s upload file types leave them out, as lhero.org&#039;s do (lh-tasks #153091). Only LH_Private_Uploads_Importer, and so lh-private-uploads/create-private-media, accepts them, only as private items gated by their required capability, and only when the file really is text (no NUL bytes); public uploads still follow the network setting. The list is filterable with lh_private_uploads_private_text_types; every other type is still checked as the uploader checks it.]]></description>
			<content:encoded><![CDATA[<p>Private media can now be made from plain-text files (CSV, TSV, TXT, Markdown, JSON, iCalendar and vCard) even where the network&#8217;s upload file types leave them out, as lhero.org&#8217;s do (lh-tasks #153091). Only LH_Private_Uploads_Importer, and so lh-private-uploads/create-private-media, accepts them, only as private items gated by their required capability, and only when the file really is text (no NUL bytes); public uploads still follow the network setting. The list is filterable with lh_private_uploads_private_text_types; every other type is still checked as the uploader checks it.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Peter Shaw		</title>
		<link>https://lhero.org/portfolio/lh-private-uploads/#comment-1537832</link>

		<dc:creator><![CDATA[Peter Shaw]]></dc:creator>
		<pubDate>Sun, 01 Nov 2026 06:29:28 +0000</pubDate>
		<guid isPermaLink="false">https://lhero.org/?post_type=lh-portfolio&#038;p=152640#comment-1537832</guid>

					<description><![CDATA[Private media for agents, with a per-file capability floor and an audit trail (lh-tasks #153091). New MCP ability lh-private-uploads/create-private-media copies any LH MCP File Abilities source (a sandbox file, a copied IMAP attachment, an existing attachment) into a site&#039;s private directory as a private media item, written straight there rather than into public uploads, with its type checked as the uploader does; it is site scoped, so site_id picks the site, and a sandbox source works whichever site is named. Requires upload_files and edit_others_posts. Files it makes carry a required capability (edit_others_posts by default, filter lh_private_uploads_default_required_capability) which the access check now applies as a floor after every other rule, so only users with it and super admins can open them, and the password form is never offered for them. They are also logged in LH Audit Trail: private_upload.added, private_upload.viewed (each proxy download, and each MCP read reported through the new lh_private_uploads_file_accessed action) and private_upload.removed, readable with manage_options. Other plugins can make such files with LH_Private_Uploads_Importer::import_file() and listen for lh_private_uploads_file_imported. Fix: deleting a private attachment now deletes its files from the private directory. Core only deletes files inside uploads, so they used to be left on disk. Each file is checked to lie in the site&#039;s own private directory before it is removed.]]></description>
			<content:encoded><![CDATA[<p>Private media for agents, with a per-file capability floor and an audit trail (lh-tasks #153091). New MCP ability lh-private-uploads/create-private-media copies any LH MCP File Abilities source (a sandbox file, a copied IMAP attachment, an existing attachment) into a site&#8217;s private directory as a private media item, written straight there rather than into public uploads, with its type checked as the uploader does; it is site scoped, so site_id picks the site, and a sandbox source works whichever site is named. Requires upload_files and edit_others_posts. Files it makes carry a required capability (edit_others_posts by default, filter lh_private_uploads_default_required_capability) which the access check now applies as a floor after every other rule, so only users with it and super admins can open them, and the password form is never offered for them. They are also logged in LH Audit Trail: private_upload.added, private_upload.viewed (each proxy download, and each MCP read reported through the new lh_private_uploads_file_accessed action) and private_upload.removed, readable with manage_options. Other plugins can make such files with LH_Private_Uploads_Importer::import_file() and listen for lh_private_uploads_file_imported. Fix: deleting a private attachment now deletes its files from the private directory. Core only deletes files inside uploads, so they used to be left on disk. Each file is checked to lie in the site&#8217;s own private directory before it is removed.</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
