<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Reliability on Arivu</title>
		<link>https://arivu.app/tags/reliability/</link>
		<description>Recent content in Reliability on Arivu</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Wed, 15 Jul 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://arivu.app/tags/reliability/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Processing Failures Have a Recovery Path</title>
				<link>https://arivu.app/chronicle/processing-failures-have-a-recovery-path/</link>
				<pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://arivu.app/chronicle/processing-failures-have-a-recovery-path/</guid>
				<description>&lt;p&gt;A background failure should not leave a self-hoster choosing between guessing, editing the database, and pretending the work never happened.&lt;/p&gt;&#xA;&lt;p&gt;Arivu Administration now makes processing failures visible and recoverable. The API Usage view lists durable failed jobs and failed summaries with the context needed to decide what to do next: the owner, affected bookmark, attempts, timestamps, provider and model context where relevant, safe error information, and recorded failure details.&lt;/p&gt;&#xA;&lt;h2 id=&#34;failures-stay-attached-to-the-work&#34;&gt;Failures Stay Attached to the Work&lt;/h2&gt;&#xA;&lt;p&gt;Failed jobs and failed summaries are shown separately because they answer different operational questions. A background job may have exhausted all of its attempts. A summary may have failed evidence or validation checks without exhausting the surrounding job.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Safer Self-Hosting, Less Guesswork</title>
				<link>https://arivu.app/chronicle/safer-self-hosting-less-guesswork/</link>
				<pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://arivu.app/chronicle/safer-self-hosting-less-guesswork/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Context, 2026-07-13:&lt;/strong&gt; Upgrades are additive-safe, preserve executable permissions under restrictive defaults, and provide useful activation diagnostics when a replacement cannot start. Existing data and configuration remain in place.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update, July 11, 2026:&lt;/strong&gt; The installer no longer requires GitHub CLI. Piped bootstrap keeps interactive prompts TTY-safe, DNS mismatches produce actionable warnings, and newer Ubuntu releases are tolerated rather than rejected only for being newer. Upgrades now verify and transactionally activate the matching app and installer binaries, roll both back if activation fails, and prompt browsers to revalidate embedded frontend assets. Tagged releases report the exact release version; development builds may report development metadata. Public HTTPS can still require correct DNS, firewall, or shared-proxy configuration.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Quieter Admin, Stronger Guarantees</title>
				<link>https://arivu.app/chronicle/admin-and-guarantees/</link>
				<pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://arivu.app/chronicle/admin-and-guarantees/</guid>
				<description>&lt;p&gt;Before we ship a wave of new features, we wanted the operating layer underneath them to be solid. This update rebuilds the admin experience on the app&amp;rsquo;s own storage, makes provider configuration a runtime concern instead of a restart concern, and adds a clear audit trail for sensitive actions.&lt;/p&gt;&#xA;&lt;p&gt;None of this changes what Arivu looks like day to day. It changes how confidently you can run it.&lt;/p&gt;&#xA;&lt;svg viewBox=&#34;0 0 700 200&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; style=&#34;max-width: 100%; height: auto; display: block; margin: 2rem auto;&#34; role=&#34;img&#34; aria-labelledby=&#34;chronicle-admin-and-guarantees-1-title chronicle-admin-and-guarantees-1-desc&#34;&gt;&#xA;  &lt;title id=&#34;chronicle-admin-and-guarantees-1-title&#34;&gt;Quieter Admin, Stronger Guarantees, diagram 1&lt;/title&gt;&#xA;  &lt;desc id=&#34;chronicle-admin-and-guarantees-1-desc&#34;&gt;Historical diagram 1 accompanying the Chronicle post Quieter Admin, Stronger Guarantees.&lt;/desc&gt;&#xA;&lt;rect x=&#34;30&#34; y=&#34;30&#34; width=&#34;150&#34; height=&#34;80&#34; fill=&#34;#CF3F1E&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;&lt;text x=&#34;105&#34; y=&#34;62&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;11&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;ADMIN&lt;/text&gt;&#xA;&lt;text x=&#34;105&#34; y=&#34;80&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;Overview, users,&lt;/text&gt;&#xA;&lt;text x=&#34;105&#34; y=&#34;94&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;system, activity&lt;/text&gt;&#xA;&lt;rect x=&#34;200&#34; y=&#34;30&#34; width=&#34;150&#34; height=&#34;80&#34; fill=&#34;#7E2412&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;&lt;text x=&#34;275&#34; y=&#34;62&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;11&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;SETTINGS&lt;/text&gt;&#xA;&lt;text x=&#34;275&#34; y=&#34;80&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;Runtime provider&lt;/text&gt;&#xA;&lt;text x=&#34;275&#34; y=&#34;94&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;keys, no restart&lt;/text&gt;&#xA;&lt;rect x=&#34;370&#34; y=&#34;30&#34; width=&#34;150&#34; height=&#34;80&#34; fill=&#34;#7E2412&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;&lt;text x=&#34;445&#34; y=&#34;62&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;11&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;AUDIT&lt;/text&gt;&#xA;&lt;text x=&#34;445&#34; y=&#34;80&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;Sensitive actions&lt;/text&gt;&#xA;&lt;text x=&#34;445&#34; y=&#34;94&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;recorded&lt;/text&gt;&#xA;&lt;rect x=&#34;540&#34; y=&#34;30&#34; width=&#34;150&#34; height=&#34;80&#34; fill=&#34;#2F2E2B&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;&lt;text x=&#34;615&#34; y=&#34;62&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;11&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;SUPPLY CHAIN&lt;/text&gt;&#xA;&lt;text x=&#34;615&#34; y=&#34;80&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;Verified builds,&lt;/text&gt;&#xA;&lt;text x=&#34;615&#34; y=&#34;94&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;pinned scans&lt;/text&gt;&#xA;&lt;rect x=&#34;30&#34; y=&#34;135&#34; width=&#34;660&#34; height=&#34;45&#34; fill=&#34;#FDFCF9&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;&lt;text x=&#34;360&#34; y=&#34;162&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;10&#34; fill=&#34;#2F2E2B&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;ONE GO APP, ONE SQLITE DATABASE, ONE PLACE TO LOOK&lt;/text&gt;&#xA;&lt;/svg&gt;&#xA;&lt;h2 id=&#34;a-native-admin-dashboard&#34;&gt;A Native Admin Dashboard&lt;/h2&gt;&#xA;&lt;p&gt;The admin dashboard now runs entirely on the app&amp;rsquo;s own SQLite storage. Admins listed in &lt;code&gt;ADMIN_EMAILS&lt;/code&gt; get an &lt;code&gt;/admin&lt;/code&gt; area with sections for overview, API usage, users, system status, recent activity, collections, and an audit log.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Deep Modularization, Reliability Engineering, and Admin Tools</title>
				<link>https://arivu.app/chronicle/architecture-reliability/</link>
				<pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate>
				<guid>https://arivu.app/chronicle/architecture-reliability/</guid>
				<description>&lt;p&gt;Our &lt;a href=&#34;https://arivu.app/chronicle/production-hardening/&#34;&gt;earlier hardening pass&lt;/a&gt; laid the groundwork - security, speed, and an initial split into smaller modules. This update goes deeper. We&amp;rsquo;ve broken the backend into fully independent domains, added retry and conflict handling for reliability, built a testing infrastructure that catches problems before you see them, and shipped an admin dashboard for controlled early access.&lt;/p&gt;&#xA;&lt;svg viewBox=&#34;0 0 700 260&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; style=&#34;max-width: 100%; height: auto; display: block; margin: 2rem auto;&#34; role=&#34;img&#34; aria-labelledby=&#34;chronicle-architecture-reliability-1-title chronicle-architecture-reliability-1-desc&#34;&gt;&#xA;  &lt;title id=&#34;chronicle-architecture-reliability-1-title&#34;&gt;Deep Modularization, Reliability Engineering, and Admin Tools, diagram 1&lt;/title&gt;&#xA;  &lt;desc id=&#34;chronicle-architecture-reliability-1-desc&#34;&gt;Historical diagram 1 accompanying the Chronicle post Deep Modularization, Reliability Engineering, and Admin Tools.&lt;/desc&gt;&#xA;  &lt;rect x=&#34;30&#34; y=&#34;20&#34; width=&#34;640&#34; height=&#34;60&#34; fill=&#34;#FDFCF9&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;  &lt;text x=&#34;350&#34; y=&#34;42&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;11&#34; fill=&#34;#2F2E2B&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;BEFORE: SINGLE LARGE BACKEND&lt;/text&gt;&#xA;  &lt;text x=&#34;350&#34; y=&#34;62&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;10&#34; fill=&#34;#2F2E2B&#34; text-anchor=&#34;middle&#34;&gt;Everything in one place - hard to test, risky to change&lt;/text&gt;&#xA;  &lt;line x1=&#34;350&#34; y1=&#34;80&#34; x2=&#34;350&#34; y2=&#34;110&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;  &lt;polygon points=&#34;344,105 356,105 350,115&#34; fill=&#34;#2F2E2B&#34;/&gt;&#xA;  &lt;rect x=&#34;30&#34; y=&#34;120&#34; width=&#34;130&#34; height=&#34;55&#34; fill=&#34;#CF3F1E&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;  &lt;text x=&#34;95&#34; y=&#34;143&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;AUTH&lt;/text&gt;&#xA;  &lt;text x=&#34;95&#34; y=&#34;163&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;Login, lockout, email&lt;/text&gt;&#xA;  &lt;rect x=&#34;170&#34; y=&#34;120&#34; width=&#34;130&#34; height=&#34;55&#34; fill=&#34;#7E2412&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;  &lt;text x=&#34;235&#34; y=&#34;143&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;BOOKMARKS&lt;/text&gt;&#xA;  &lt;text x=&#34;235&#34; y=&#34;163&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;CRUD, search, AI&lt;/text&gt;&#xA;  &lt;rect x=&#34;310&#34; y=&#34;120&#34; width=&#34;130&#34; height=&#34;55&#34; fill=&#34;#7E2412&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;  &lt;text x=&#34;375&#34; y=&#34;143&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;ANALYTICS&lt;/text&gt;&#xA;  &lt;text x=&#34;375&#34; y=&#34;163&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;Insights, graphs&lt;/text&gt;&#xA;  &lt;rect x=&#34;450&#34; y=&#34;120&#34; width=&#34;110&#34; height=&#34;55&#34; fill=&#34;#2F2E2B&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;  &lt;text x=&#34;505&#34; y=&#34;143&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;COLLECTIONS&lt;/text&gt;&#xA;  &lt;text x=&#34;505&#34; y=&#34;163&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;Organize, filter&lt;/text&gt;&#xA;  &lt;rect x=&#34;570&#34; y=&#34;120&#34; width=&#34;100&#34; height=&#34;55&#34; fill=&#34;#2F2E2B&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;  &lt;text x=&#34;620&#34; y=&#34;143&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;ADMIN&lt;/text&gt;&#xA;  &lt;text x=&#34;620&#34; y=&#34;163&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;9&#34; fill=&#34;#FDFCF9&#34; text-anchor=&#34;middle&#34;&gt;Invites, health&lt;/text&gt;&#xA;  &lt;rect x=&#34;30&#34; y=&#34;195&#34; width=&#34;640&#34; height=&#34;50&#34; fill=&#34;#FDFCF9&#34; stroke=&#34;#2F2E2B&#34; stroke-width=&#34;2&#34;/&gt;&#xA;  &lt;text x=&#34;350&#34; y=&#34;218&#34; font-family=&#34;&#39;Geist Mono&#39;, monospace&#34; font-size=&#34;10&#34; fill=&#34;#2F2E2B&#34; text-anchor=&#34;middle&#34; font-weight=&#34;bold&#34;&gt;RELIABILITY LAYER: RETRY, CONFLICT HANDLING, RATE LIMITING&lt;/text&gt;&#xA;  &lt;text x=&#34;350&#34; y=&#34;235&#34; font-family=&#34;&#39;Geist&#39;, sans-serif&#34; font-size=&#34;10&#34; fill=&#34;#2F2E2B&#34; text-anchor=&#34;middle&#34;&gt;Graceful recovery &amp;amp; protection across all domains&lt;/text&gt;&#xA;&lt;/svg&gt;&#xA;&lt;h2 id=&#34;full-domain-separation&#34;&gt;Full Domain Separation&lt;/h2&gt;&#xA;&lt;p&gt;The initial hardening split out a few core services. This time, we went further - every major feature area now lives in its own domain with clear boundaries. Authentication has its own dedicated layer, including lockout and email handling. Bookmarks, collections, analytics, import/export, knowledge graph, search, and AI processing are all independent.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
