<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://interfaces3.hunter.cryptograss.live/index.php?action=history&amp;feed=atom&amp;title=Cryptograss%3ABackups</id>
	<title>Cryptograss:Backups - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://interfaces3.hunter.cryptograss.live/index.php?action=history&amp;feed=atom&amp;title=Cryptograss%3ABackups"/>
	<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;action=history"/>
	<updated>2026-11-15T06:09:30Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16388&amp;oldid=prev</id>
		<title>Re: Vault password: the sweep (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16388&amp;oldid=prev"/>
		<updated>2026-11-12T21:36:02Z</updated>

		<summary type="html">&lt;p&gt;Vault password: the sweep (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:36, 12 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l63&quot;&gt;Line 63:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 63:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== The vault password ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== The vault password ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Bot_proposes|It is not kept on maybelle. &amp;lt;code&amp;gt;maybelle-chapter-1.sh&amp;lt;/code&amp;gt; copies it from the deploying person&#039;s laptop to &amp;lt;code&amp;gt;/mnt/persist/.vault-password&amp;lt;/code&amp;gt;, and the playbook&#039;s task &quot;Remove vault password file&quot; deletes it near the end. The six newest maybelle deploy logs (11–12 Nov) list that task as changed, so it was there during the deploy and removed after. The gap: a deploy that failed before that task left the password on the volume until the next one got that far. &amp;lt;code&amp;gt;maybelle-config:re/vault-password-always-removed&amp;lt;/code&amp;gt; removes it when the deploy script exits, however the deploy ends. The other targets (hunter, PickiPedia, delivery-kid) write it to &amp;lt;code&amp;gt;/tmp/vault_pass_$$&amp;lt;/code&amp;gt; and remove it on exit already. No backup copies the whole volume, so it is in no backup.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Bot_proposes|It is not kept on maybelle. &amp;lt;code&amp;gt;maybelle-chapter-1.sh&amp;lt;/code&amp;gt; copies it from the deploying person&#039;s laptop to &amp;lt;code&amp;gt;/mnt/persist/.vault-password&amp;lt;/code&amp;gt;, and the playbook&#039;s task &quot;Remove vault password file&quot; deletes it near the end. The six newest maybelle deploy logs (11–12 Nov) list that task as changed, so it was there during the deploy and removed after. The gap: a deploy that failed before that task left the password on the volume until the next one got that far. &amp;lt;code&amp;gt;maybelle-config:re/vault-password-always-removed&amp;lt;/code&amp;gt; removes it when the deploy script exits, however the deploy ends&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. On the same branch, a cron on maybelle (&amp;lt;code&amp;gt;vault-password-sweep.sh&amp;lt;/code&amp;gt;, every 10 minutes) removes it if it&#039;s there outside a deploy, and cron-health&#039;s &quot;vault password sweep&quot; stage then stays red for a day, which posts to #ops&lt;/ins&gt;. The other targets (hunter, PickiPedia, delivery-kid) write it to &amp;lt;code&amp;gt;/tmp/vault_pass_$$&amp;lt;/code&amp;gt; and remove it on exit already. No backup copies the whole volume, so it is in no backup.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== magenta database ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== magenta database ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Re</name></author>
	</entry>
	<entry>
		<id>https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16386&amp;oldid=prev</id>
		<title>Re: One gaps list, numbered 1-6 (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16386&amp;oldid=prev"/>
		<updated>2026-11-12T21:31:11Z</updated>

		<summary type="html">&lt;p&gt;One gaps list, numbered 1-6 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:31, 12 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l108&quot;&gt;Line 108:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 108:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;PickiPedia never leaves Hetzner.&amp;#039;&amp;#039;&amp;#039; Database and files both, and the other ✗ rows under [[#Cold start: everything it needs{{!}}Cold start]]. Fix: one offsite job, to a store outside Hetzner, for everything the cold start needs.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;PickiPedia never leaves Hetzner.&amp;#039;&amp;#039;&amp;#039; Database and files both, and the other ✗ rows under [[#Cold start: everything it needs{{!}}Cold start]]. Fix: one offsite job, to a store outside Hetzner, for everything the cold start needs.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;magenta&amp;#039;s offsite copy is only 7 days deep.&amp;#039;&amp;#039;&amp;#039; A problem nobody notices for 8 days is in every copy. Fix: the offsite job keeps a history (7 daily, 4 weekly, 12 monthly), and maybelle&amp;#039;s key to the store can add but not delete, so whoever controls maybelle can&amp;#039;t empty it either.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;magenta&amp;#039;s offsite copy is only 7 days deep.&amp;#039;&amp;#039;&amp;#039; A problem nobody notices for 8 days is in every copy. Fix: the offsite job keeps a history (7 daily, 4 weekly, 12 monthly), and maybelle&amp;#039;s key to the store can add but not delete, so whoever controls maybelle can&amp;#039;t empty it either.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Copies nobody checks:&amp;#039;&amp;#039;&amp;#039; the PickiPedia server&amp;#039;s own dump, hunter&amp;#039;s PickiPedia copy, the file copy, the VCS pull, Pinata. Fix: a cron-health stage for each.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Copies nobody checks:&amp;#039;&amp;#039;&amp;#039; the PickiPedia server&amp;#039;s own dump, hunter&amp;#039;s PickiPedia copy, the file copy, the VCS pull, Pinata. Fix: a cron-health stage for each.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;hunter&amp;#039;s PickiPedia history starts at 4 Oct 2026&amp;#039;&amp;#039;&amp;#039; (19 dumps), though its retention keeps a year. The pruning code is right, so something else removed the older dumps. Unknown what; hunter&amp;#039;s journal for &amp;lt;code&amp;gt;pickipedia-backup-retention&amp;lt;/code&amp;gt; is the place to look.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;hunter&amp;#039;s PickiPedia history starts at 4 Oct 2026&amp;#039;&amp;#039;&amp;#039; (19 dumps), though its retention keeps a year. The pruning code is right, so something else removed the older dumps. Unknown what; hunter&amp;#039;s journal for &amp;lt;code&amp;gt;pickipedia-backup-retention&amp;lt;/code&amp;gt; is the place to look.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Re</name></author>
	</entry>
	<entry>
		<id>https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16385&amp;oldid=prev</id>
		<title>Re: Put gaps 3-6 back in the gaps list, before the store table (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16385&amp;oldid=prev"/>
		<updated>2026-11-12T21:30:59Z</updated>

		<summary type="html">&lt;p&gt;Put gaps 3-6 back in the gaps list, before the store table (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:30, 12 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l108&quot;&gt;Line 108:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 108:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;PickiPedia never leaves Hetzner.&amp;#039;&amp;#039;&amp;#039; Database and files both, and the other ✗ rows under [[#Cold start: everything it needs{{!}}Cold start]]. Fix: one offsite job, to a store outside Hetzner, for everything the cold start needs.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;PickiPedia never leaves Hetzner.&amp;#039;&amp;#039;&amp;#039; Database and files both, and the other ✗ rows under [[#Cold start: everything it needs{{!}}Cold start]]. Fix: one offsite job, to a store outside Hetzner, for everything the cold start needs.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;magenta&amp;#039;s offsite copy is only 7 days deep.&amp;#039;&amp;#039;&amp;#039; A problem nobody notices for 8 days is in every copy. Fix: the offsite job keeps a history (7 daily, 4 weekly, 12 monthly), and maybelle&amp;#039;s key to the store can add but not delete, so whoever controls maybelle can&amp;#039;t empty it either.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;magenta&amp;#039;s offsite copy is only 7 days deep.&amp;#039;&amp;#039;&amp;#039; A problem nobody notices for 8 days is in every copy. Fix: the offsite job keeps a history (7 daily, 4 weekly, 12 monthly), and maybelle&amp;#039;s key to the store can add but not delete, so whoever controls maybelle can&amp;#039;t empty it either.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# {{Bot_proposes|&#039;&#039;&#039;Copies nobody checks:&#039;&#039;&#039; the PickiPedia server&#039;s own dump, hunter&#039;s PickiPedia copy, the file copy, the VCS pull, Pinata. Fix: a cron-health stage for each.|by=Re}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# {{Bot_proposes|&#039;&#039;&#039;hunter&#039;s PickiPedia history starts at 4 Oct 2026&#039;&#039;&#039; (19 dumps), though its retention keeps a year. The pruning code is right, so something else removed the older dumps. Unknown what; hunter&#039;s journal for &amp;lt;code&amp;gt;pickipedia-backup-retention&amp;lt;/code&amp;gt; is the place to look.|by=Re}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# {{Bot_proposes|maybelle&#039;s &amp;lt;code&amp;gt;mysqldump&amp;lt;/code&amp;gt; runs without &amp;lt;code&amp;gt;--single-transaction&amp;lt;/code&amp;gt;, so the wiki&#039;s tables are locked while it dumps (daily, 03:30). The server&#039;s own dump already uses the flag.|by=Re}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# {{Bot_proposes|&#039;&#039;&#039;No restore test.&#039;&#039;&#039; magenta&#039;s dumps are read back, which proves they&#039;re readable, not that they restore. hunter&#039;s previews loading PickiPedia dumps is the nearest thing to a test.|by=Re}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Where the offsite copy goes ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Where the offsite copy goes ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l123&quot;&gt;Line 123:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 128:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Bot_proposes|re&amp;#039;s choice: &amp;#039;&amp;#039;&amp;#039;Backblaze B2&amp;#039;&amp;#039;&amp;#039;, with restic: encrypted before it leaves, deduplicated, retention by rule. 30 GB is about $0.21 a month. The restic password and the B2 key go in the vault, so the chain is: a person holds the vault password, GitHub holds the vault, the vault opens B2. Justin&amp;#039;s call: [[Cryptograss:Moods/backups/todo]].|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Bot_proposes|re&amp;#039;s choice: &amp;#039;&amp;#039;&amp;#039;Backblaze B2&amp;#039;&amp;#039;&amp;#039;, with restic: encrypted before it leaves, deduplicated, retention by rule. 30 GB is about $0.21 a month. The restic password and the B2 key go in the vault, so the chain is: a person holds the vault password, GitHub holds the vault, the vault opens B2. Justin&amp;#039;s call: [[Cryptograss:Moods/backups/todo]].|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# {{Bot_proposes|&#039;&#039;&#039;Copies nobody checks:&#039;&#039;&#039; the PickiPedia server&#039;s own dump, hunter&#039;s PickiPedia copy, the file copy, the VCS pull, Pinata. Fix: a cron-health stage for each.|by=Re}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# {{Bot_proposes|&#039;&#039;&#039;hunter&#039;s PickiPedia history starts at 4 Oct 2026&#039;&#039;&#039; (19 dumps), though its retention keeps a year. The pruning code is right, so something else removed the older dumps. Unknown what; hunter&#039;s journal for &amp;lt;code&amp;gt;pickipedia-backup-retention&amp;lt;/code&amp;gt; is the place to look.|by=Re}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# {{Bot_proposes|maybelle&#039;s &amp;lt;code&amp;gt;mysqldump&amp;lt;/code&amp;gt; runs without &amp;lt;code&amp;gt;--single-transaction&amp;lt;/code&amp;gt;, so the wiki&#039;s tables are locked while it dumps (daily, 03:30). The server&#039;s own dump already uses the flag.|by=Re}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# {{Bot_proposes|&#039;&#039;&#039;No restore test.&#039;&#039;&#039; magenta&#039;s dumps are read back, which proves they&#039;re readable, not that they restore. hunter&#039;s previews loading PickiPedia dumps is the nearest thing to a test.|by=Re}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Where the code is ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Where the code is ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Re</name></author>
	</entry>
	<entry>
		<id>https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16382&amp;oldid=prev</id>
		<title>Re: Gaps: where the offsite copy goes, with prices; retention that a compromised maybelle can&#039;t delete (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16382&amp;oldid=prev"/>
		<updated>2026-11-12T21:30:34Z</updated>

		<summary type="html">&lt;p&gt;Gaps: where the offsite copy goes, with prices; retention that a compromised maybelle can&amp;#039;t delete (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:30, 12 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l106&quot;&gt;Line 106:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 106:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Gaps, and the fixes we want ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Gaps, and the fixes we want ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&#039;&#039;&#039;PickiPedia never leaves Hetzner.&#039;&#039;&#039; Database and files both&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Fix: send the daily dump &lt;/del&gt;and the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;files directory to NearlyFreeSpeech beside magenta&#039;s. Justin&#039;s call: &lt;/del&gt;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Cryptograss&lt;/del&gt;:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Moods/backups/todo&lt;/del&gt;]].|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&#039;&#039;&#039;PickiPedia never leaves Hetzner.&#039;&#039;&#039; Database and files both&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/ins&gt;and the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;other ✗ rows under &lt;/ins&gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;#Cold start&lt;/ins&gt;: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;everything it needs{{!}}Cold start&lt;/ins&gt;]]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Fix: one offsite job, to a store outside Hetzner, for everything the cold start needs&lt;/ins&gt;.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&#039;&#039;&#039;magenta&#039;s offsite copy is only 7 days deep.&#039;&#039;&#039; A problem nobody notices for 8 days is in every copy. Fix: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;keep one dump &lt;/del&gt;a month &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;on NearlyFreeSpeech outside the &amp;lt;code&amp;gt;&lt;/del&gt;--delete&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&amp;gt; mirror&lt;/del&gt;.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&#039;&#039;&#039;magenta&#039;s offsite copy is only 7 days deep.&#039;&#039;&#039; A problem nobody notices for 8 days is in every copy. Fix: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the offsite job keeps a history (7 daily, 4 weekly, 12 monthly), and maybelle&#039;s key to the store can add but not delete, so whoever controls maybelle can&#039;t empty it either.|by=Re}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Where the offsite copy goes ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Bot_proposes|Prices from each provider&#039;s own pricing page, 12 Nov 2026:|by=Re}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{| class=&quot;wikitable&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! Store !! Price !! Outside Hetzner? !! Notes&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| NearlyFreeSpeech (today&#039;s) || $1.00 per GiB-month (site storage) || yes || magenta&#039;s 10.4 GB costs about $10 &lt;/ins&gt;a month&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; 30 GB would be about $30&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/ins&gt;-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Backblaze B2 || $6.95 per TB&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;month (about $0.007 per GB) || yes || pay for what&#039;s stored; object lock and keys that can&#039;t &lt;/ins&gt;delete&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| rsync.net || 1.5¢ per GB-month, 800 GB minimum (about $12 a month) || yes || plain SSH and rsync; snapshots&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Hetzner Storage Box BX11 || €3.20 a month for 1 TB || &#039;&#039;&#039;no&#039;&#039;&#039; || cheapest per TB, but on the same provider&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Bot_proposes|re&#039;s choice: &#039;&#039;&#039;Backblaze B2&#039;&#039;&#039;, with restic: encrypted before it leaves, deduplicated, retention by rule. 30 GB is about $0.21 a month. The restic password and the B2 key go in the vault, so the chain is: a person holds the vault password, GitHub holds the vault, the vault opens B2. Justin&#039;s call: [[Cryptograss:Moods/backups&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;todo]]&lt;/ins&gt;.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Copies nobody checks:&amp;#039;&amp;#039;&amp;#039; the PickiPedia server&amp;#039;s own dump, hunter&amp;#039;s PickiPedia copy, the file copy, the VCS pull, Pinata. Fix: a cron-health stage for each.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Copies nobody checks:&amp;#039;&amp;#039;&amp;#039; the PickiPedia server&amp;#039;s own dump, hunter&amp;#039;s PickiPedia copy, the file copy, the VCS pull, Pinata. Fix: a cron-health stage for each.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;hunter&amp;#039;s PickiPedia history starts at 4 Oct 2026&amp;#039;&amp;#039;&amp;#039; (19 dumps), though its retention keeps a year. The pruning code is right, so something else removed the older dumps. Unknown what; hunter&amp;#039;s journal for &amp;lt;code&amp;gt;pickipedia-backup-retention&amp;lt;/code&amp;gt; is the place to look.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;hunter&amp;#039;s PickiPedia history starts at 4 Oct 2026&amp;#039;&amp;#039;&amp;#039; (19 dumps), though its retention keeps a year. The pruning code is right, so something else removed the older dumps. Unknown what; hunter&amp;#039;s journal for &amp;lt;code&amp;gt;pickipedia-backup-retention&amp;lt;/code&amp;gt; is the place to look.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Re</name></author>
	</entry>
	<entry>
		<id>https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16381&amp;oldid=prev</id>
		<title>Re: Cold start: the property map (drill step one); the vault password, checked (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=16381&amp;oldid=prev"/>
		<updated>2026-11-12T21:30:22Z</updated>

		<summary type="html">&lt;p&gt;Cold start: the property map (drill step one); the vault password, checked (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:30, 12 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l22&quot;&gt;Line 22:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 22:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;Unpushed work on hunter&amp;#039;&amp;#039;&amp;#039; (branches on no remote, uncommitted edits) || hunter || hourly bundle in &amp;lt;code&amp;gt;/opt/magenta/vcs-backup/&amp;lt;/code&amp;gt; || maybelle, latest + 30 daily || &amp;#039;&amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;nothing&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;Unpushed work on hunter&amp;#039;&amp;#039;&amp;#039; (branches on no remote, uncommitted edits) || hunter || hourly bundle in &amp;lt;code&amp;gt;/opt/magenta/vcs-backup/&amp;lt;/code&amp;gt; || maybelle, latest + 30 daily || &amp;#039;&amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;nothing&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Cold start: everything it needs ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Bot_proposes|What [[Cryptograss:Drill:Cold Start Rebuild (by block 26,400,000){{!}}the cold start drill]] needs if every Hetzner machine is gone at once, and where each thing comes back from. This is the drill&#039;s step one, the property map. Checked by re at block 26,401,540 (12 Nov 2026) against maybelle-config &amp;lt;code&amp;gt;production&amp;lt;/code&amp;gt; @ &amp;lt;code&amp;gt;38730290&amp;lt;/code&amp;gt;. A row without a copy outside Hetzner is a gap.|by=Re}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{| class=&quot;wikitable&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! Needed !! Lives on !! Copy outside Hetzner !! Status&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &#039;&#039;&#039;The vault password&#039;&#039;&#039; || people only. maybelle has it only while a deploy runs (see below) || people || who holds it besides Justin is not written anywhere&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| maybelle-config, with the encrypted vault (every secret not made on the box) || githouse on maybelle || GitHub (githouse forwards every push and merge) || ✓&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Every other repository (magenta, pickipedia, arthel, rabbithole, pickipedia-mcp …) || githouse || GitHub || ✓&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| githouse&#039;s signed merge log (&amp;lt;code&amp;gt;/srv/git/.merges&amp;lt;/code&amp;gt;) || maybelle || none || ✗ small; the merges themselves are on GitHub&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| magenta database || maybelle || NearlyFreeSpeech, 7 days || ✓, but only 7 days deep&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| PickiPedia database || PickiPedia server || none || ✗&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| PickiPedia files (uploads) || PickiPedia server || none || ✗&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| PickiPedia&#039;s code and settings || pickipedia repo; LocalSettings from the vault || GitHub || ✓&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Release media (IPFS blocks) || delivery-kid&#039;s Storage Box || Pinata, if every pin reached it || unverified&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| delivery-kid&#039;s staging (unpublished uploads, 171 MB at 8 Nov&#039;s audit) and seeding directories || Storage Box || none || ✗ unpublished uploads; seeding can be rebuilt from IPFS&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| IPFS node identity (&amp;lt;code&amp;gt;/var/lib/ipfs&amp;lt;/code&amp;gt;) || delivery-kid || none || a new node gets a new peer ID; CIDs don&#039;t change&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Unpushed work on hunter || hunter, pulled to maybelle || none || ✗ the drill counts homes as disposable&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| GlitchTip&#039;s database || maybelle || none || ✗ error history only&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| justinholmes.com (arthel) || NearlyFreeSpeech || it&#039;s built from GitHub || ✓&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| DNS || cryptograss.live and justinholmes.com on NearlyFreeSpeech; pickipedia.xyz on Namecheap || the providers themselves || records are not in code: new servers mean new addresses, typed in by hand&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Keys made on the box (githouse&#039;s mirror key, the containers&#039; githouse keys, maybelle&#039;s backup key) || made by the playbooks || none needed || ✓ made again on deploy; the public halves flow to githouse by themselves&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== The vault password ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Bot_proposes|It is not kept on maybelle. &amp;lt;code&amp;gt;maybelle-chapter-1.sh&amp;lt;/code&amp;gt; copies it from the deploying person&#039;s laptop to &amp;lt;code&amp;gt;/mnt/persist/.vault-password&amp;lt;/code&amp;gt;, and the playbook&#039;s task &quot;Remove vault password file&quot; deletes it near the end. The six newest maybelle deploy logs (11–12 Nov) list that task as changed, so it was there during the deploy and removed after. The gap: a deploy that failed before that task left the password on the volume until the next one got that far. &amp;lt;code&amp;gt;maybelle-config:re/vault-password-always-removed&amp;lt;/code&amp;gt; removes it when the deploy script exits, however the deploy ends. The other targets (hunter, PickiPedia, delivery-kid) write it to &amp;lt;code&amp;gt;/tmp/vault_pass_$$&amp;lt;/code&amp;gt; and remove it on exit already. No backup copies the whole volume, so it is in no backup.|by=Re}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== magenta database ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== magenta database ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Re</name></author>
	</entry>
	<entry>
		<id>https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=15328&amp;oldid=prev</id>
		<title>Re: Fix redlink: the audits are subpages (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=15328&amp;oldid=prev"/>
		<updated>2026-11-09T01:45:15Z</updated>

		<summary type="html">&lt;p&gt;Fix redlink: the audits are subpages (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:45, 9 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l50&quot;&gt;Line 50:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 50:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Release media (IPFS) ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Release media (IPFS) ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Bot_proposes|delivery-kid&#039;s kubo keeps its blocks on a Hetzner Storage Box mounted at &amp;lt;code&amp;gt;/mnt/storage-box&amp;lt;/code&amp;gt;. When a release is pinned, the pinning service also pins its CID to Pinata if &amp;lt;code&amp;gt;PINATA_JWT&amp;lt;/code&amp;gt; is set (&amp;lt;code&amp;gt;delivery-kid/pinning-service/app/services/ipfs.py&amp;lt;/code&amp;gt;); a Pinata failure doesn&#039;t fail the pin. The storage audit ([[Cryptograss:Delivery-kid-audits]]) compares local pins with Release pages; it doesn&#039;t check Pinata. Whether every release has a Pinata copy is unverified.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Bot_proposes|delivery-kid&#039;s kubo keeps its blocks on a Hetzner Storage Box mounted at &amp;lt;code&amp;gt;/mnt/storage-box&amp;lt;/code&amp;gt;. When a release is pinned, the pinning service also pins its CID to Pinata if &amp;lt;code&amp;gt;PINATA_JWT&amp;lt;/code&amp;gt; is set (&amp;lt;code&amp;gt;delivery-kid/pinning-service/app/services/ipfs.py&amp;lt;/code&amp;gt;); a Pinata failure doesn&#039;t fail the pin. The storage audit (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pages under &amp;lt;code&amp;gt;Cryptograss:Delivery-kid-audits/&amp;lt;/code&amp;gt;, newest &lt;/ins&gt;[[Cryptograss:Delivery-kid-audits&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/26371360&lt;/ins&gt;]]) compares local pins with Release pages; it doesn&#039;t check Pinata. Whether every release has a Pinata copy is unverified.|by=Re}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Code ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Code ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Re</name></author>
	</entry>
	<entry>
		<id>https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=15327&amp;oldid=prev</id>
		<title>Re: One place for what is backed up, where, and what leaves the box (Justin, #backups) (via create-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:Backups&amp;diff=15327&amp;oldid=prev"/>
		<updated>2026-11-09T01:45:05Z</updated>

		<summary type="html">&lt;p&gt;One place for what is backed up, where, and what leaves the box (Justin, #backups) (via create-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;What we keep, where its copies are, and which of them leave the box the thing runs on.&amp;#039;&amp;#039;&amp;#039; This is the one place for it; other pages link here instead of repeating it.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
{{Bot_proposes|&amp;#039;&amp;#039;Checked by [[User:Re{{!}}re]] at block 26,374,114 (9 Nov 2026) against maybelle-config &amp;lt;code&amp;gt;origin/production&amp;lt;/code&amp;gt; @ &amp;lt;code&amp;gt;accdf749&amp;lt;/code&amp;gt;, maybelle&amp;#039;s &amp;lt;code&amp;gt;cron-health&amp;lt;/code&amp;gt; build 56528 (SUCCESS, 01:35Z), hunter&amp;#039;s &amp;lt;code&amp;gt;/opt/magenta/pickipedia-backups&amp;lt;/code&amp;gt;, and PickiPedia&amp;#039;s API. Times are UTC: maybelle&amp;#039;s cron runs in UTC.&amp;#039;&amp;#039;|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== The rule ==&lt;br /&gt;
{{Bot_proposes|Everything worth keeping has a copy &amp;#039;&amp;#039;&amp;#039;off the box&amp;#039;&amp;#039;&amp;#039; that runs it, and the things that matter most also have a copy &amp;#039;&amp;#039;&amp;#039;off the provider&amp;#039;&amp;#039;&amp;#039;. All four of our servers ([[Cryptograss:Maybelle{{!}}maybelle]], [[Cryptograss:Hunter{{!}}hunter]], the PickiPedia server and [[Cryptograss:Delivery-kid{{!}}delivery-kid]]) are Hetzner machines, and delivery-kid&amp;#039;s storage is a Hetzner Storage Box. So a copy on another one of our servers protects against losing a disk or a server, but not against losing the Hetzner account. Only a copy outside Hetzner protects against that.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== At a glance ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! What !! Lives on !! Copies on the same box !! Off the box (Hetzner) !! Off Hetzner !! Checked by&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;magenta database&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;magenta_memory&amp;lt;/code&amp;gt;: the record, Moods, memory) || maybelle, &amp;lt;code&amp;gt;magenta-postgres&amp;lt;/code&amp;gt; || 2-hourly dumps, 12 h; daily dumps, 7 days || none || NearlyFreeSpeech: a mirror of the 7 daily dumps || cron-health, three stages&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;PickiPedia database&amp;#039;&amp;#039;&amp;#039; (MariaDB) || PickiPedia server || daily dump, 14 days || maybelle (3 days); hunter (14 daily, 8 weekly, 12 monthly) || &amp;#039;&amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;#039; || cron-health checks maybelle&amp;#039;s copy only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;PickiPedia files&amp;#039;&amp;#039;&amp;#039; (uploads) || PickiPedia server || none || maybelle (files changed in the last 7 days, kept 14); hunter (accumulates) || &amp;#039;&amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;nothing&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Release media&amp;#039;&amp;#039;&amp;#039; (IPFS) || delivery-kid, blocks on the Storage Box || none || none || Pinata, when the key is set; unverified || storage audit counts local pins, not Pinata&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Code&amp;#039;&amp;#039;&amp;#039; || GitHub || n/a || githouse on maybelle (fetches every minute); everyone&amp;#039;s clones || GitHub itself || n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Unpushed work on hunter&amp;#039;&amp;#039;&amp;#039; (branches on no remote, uncommitted edits) || hunter || hourly bundle in &amp;lt;code&amp;gt;/opt/magenta/vcs-backup/&amp;lt;/code&amp;gt; || maybelle, latest + 30 daily || &amp;#039;&amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;nothing&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== magenta database ==&lt;br /&gt;
{{Bot_proposes|Still called memory-lane in the code and on the servers. Postgres in the &amp;lt;code&amp;gt;magenta-postgres&amp;lt;/code&amp;gt; container on maybelle; data, dumps and daily copies are all on maybelle&amp;#039;s one volume, &amp;lt;code&amp;gt;/mnt/persist&amp;lt;/code&amp;gt;.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Every two hours&amp;#039;&amp;#039;&amp;#039;, at odd hours, &amp;lt;code&amp;gt;/mnt/persist/magenta/backup-postgres.sh&amp;lt;/code&amp;gt; writes &amp;lt;code&amp;gt;backups/magenta_memory_&amp;amp;lt;block height&amp;amp;gt;.dump&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;pg_dump -Fc&amp;lt;/code&amp;gt;, about 1.2 GB). It skips the dump if free space is under twice the last one, and deletes any dump that doesn&amp;#039;t read back to the end with &amp;lt;code&amp;gt;pg_restore -f /dev/null&amp;lt;/code&amp;gt;. Kept 12 hours.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Daily:&amp;#039;&amp;#039;&amp;#039; the 03:00 dump is copied to &amp;lt;code&amp;gt;backups/daily/&amp;lt;/code&amp;gt; and kept 7 days.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Off the box, and off Hetzner:&amp;#039;&amp;#039;&amp;#039; at 04:00 &amp;lt;code&amp;gt;/usr/local/bin/backup-to-nfs.sh&amp;lt;/code&amp;gt; rsyncs &amp;lt;code&amp;gt;daily/&amp;lt;/code&amp;gt; to NearlyFreeSpeech (&amp;lt;code&amp;gt;/home/private/backups/&amp;lt;/code&amp;gt;) with &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt;. That copy is a mirror: the same 7 days, never older. Log: &amp;lt;code&amp;gt;/var/log/nfs-backup.log&amp;lt;/code&amp;gt;.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Checked by&amp;#039;&amp;#039;&amp;#039; cron-health every 5 minutes: newest dump under 3 h old, newest daily under 26 h, last offsite sync under 26 h old and not empty. At build 56528: dump 0 h old, daily 22 h old (9 kept), offsite sync 21 h ago, 10.4 GB.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Restore:&amp;#039;&amp;#039;&amp;#039; when maybelle&amp;#039;s ansible finds the database empty, it lists the dumps in &amp;lt;code&amp;gt;/mnt/persist/magenta/backups/&amp;lt;/code&amp;gt; and asks which one to restore (&amp;lt;code&amp;gt;maybelle/ansible/maybelle.yml&amp;lt;/code&amp;gt;). See [[Cryptograss:Maybelle/Bot]] for the rebuild.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== PickiPedia database ==&lt;br /&gt;
{{Bot_proposes|MariaDB on the PickiPedia server.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;On the box:&amp;#039;&amp;#039;&amp;#039; at 03:00 &amp;lt;code&amp;gt;/usr/local/bin/backup-pickipedia-db.sh&amp;lt;/code&amp;gt; (role &amp;lt;code&amp;gt;pickipedia-vps/ansible/roles/mariadb&amp;lt;/code&amp;gt;) writes &amp;lt;code&amp;gt;/var/backups/pickipedia/pickipedia_YYYYMMDD.sql.gz&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;--single-transaction&amp;lt;/code&amp;gt;, kept 14 days. Same disk as the database. Nothing checks it.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Off the box, to maybelle:&amp;#039;&amp;#039;&amp;#039; at 03:30 &amp;lt;code&amp;gt;/usr/local/bin/backup-pickipedia.sh&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;maybelle/scripts/backup-pickipedia.sh&amp;lt;/code&amp;gt;) runs &amp;lt;code&amp;gt;mysqldump&amp;lt;/code&amp;gt; on the server over SSH and writes &amp;lt;code&amp;gt;/mnt/persist/pickipedia/backups/pickipedia_YYYYMMDD.sql.gz&amp;lt;/code&amp;gt; (about 233 MB), kept 3 days. Log: &amp;lt;code&amp;gt;/var/log/pickipedia-backup.log&amp;lt;/code&amp;gt;.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Off the box, to hunter:&amp;#039;&amp;#039;&amp;#039; the same script rsyncs that directory to hunter&amp;#039;s &amp;lt;code&amp;gt;/opt/magenta/pickipedia-backups/&amp;lt;/code&amp;gt;, without &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt;. hunter&amp;#039;s &amp;lt;code&amp;gt;pickipedia-backup-retention&amp;lt;/code&amp;gt; timer (&amp;lt;code&amp;gt;prune-backups.py&amp;lt;/code&amp;gt;) keeps 14 daily, 8 weekly and 12 monthly. Preview environments on hunter load from here ([https://github.com/cryptograss/pickipedia/issues/107 pickipedia#107]).|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Off Hetzner: none.&amp;#039;&amp;#039;&amp;#039;|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Checked by&amp;#039;&amp;#039;&amp;#039; cron-health&amp;#039;s &amp;quot;pickipedia backup&amp;quot; stage: maybelle&amp;#039;s last success under 25 h, newest file over 1,000 bytes. At build 56528: 22 h old, 233,170,403 bytes. The server&amp;#039;s own dump and hunter&amp;#039;s copy are not checked.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Restore:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;maybelle/scripts/import-pickipedia.sh&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;import-pickipedia-remote.py&amp;lt;/code&amp;gt;. Not read for this page.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== PickiPedia files ==&lt;br /&gt;
{{Bot_proposes|Uploads live in &amp;lt;code&amp;gt;/var/www/pickipedia/images&amp;lt;/code&amp;gt; on the PickiPedia server: 203 files, 1.66 GB at block 26,374,114 (current versions, from the API).|by=Re}}&lt;br /&gt;
&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Off the box:&amp;#039;&amp;#039;&amp;#039; after the database dump, maybelle copies files changed in the last 7 days (leaving out &amp;lt;code&amp;gt;temp/&amp;lt;/code&amp;gt;) into &amp;lt;code&amp;gt;/mnt/persist/pickipedia/backups/images/&amp;lt;/code&amp;gt;, kept 14 days, and the rsync to hunter carries them along. Hunter never deletes, so it accumulates: it holds 201 of the 203 current files (missing: &amp;lt;code&amp;gt;Attatchment.XX3c7r.JPEG&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;IMG_6401_2.JPG&amp;lt;/code&amp;gt;). Older files are in hunter&amp;#039;s top-level hash directories, newer ones under &amp;lt;code&amp;gt;var/www/pickipedia/images/&amp;lt;/code&amp;gt;.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Off Hetzner: none.&amp;#039;&amp;#039;&amp;#039;|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Checked by: nothing.&amp;#039;&amp;#039;&amp;#039; A failed copy writes a WARNING to the log, and cron-health doesn&amp;#039;t read it.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== Release media (IPFS) ==&lt;br /&gt;
{{Bot_proposes|delivery-kid&amp;#039;s kubo keeps its blocks on a Hetzner Storage Box mounted at &amp;lt;code&amp;gt;/mnt/storage-box&amp;lt;/code&amp;gt;. When a release is pinned, the pinning service also pins its CID to Pinata if &amp;lt;code&amp;gt;PINATA_JWT&amp;lt;/code&amp;gt; is set (&amp;lt;code&amp;gt;delivery-kid/pinning-service/app/services/ipfs.py&amp;lt;/code&amp;gt;); a Pinata failure doesn&amp;#039;t fail the pin. The storage audit ([[Cryptograss:Delivery-kid-audits]]) compares local pins with Release pages; it doesn&amp;#039;t check Pinata. Whether every release has a Pinata copy is unverified.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
{{Bot_proposes|Repositories live on GitHub. githouse on maybelle (&amp;lt;code&amp;gt;/mnt/persist/githouse&amp;lt;/code&amp;gt;) fetches GitHub&amp;#039;s branches every minute and forwards emergents&amp;#039; pushes to GitHub, so code has at least two copies on different providers, plus everyone&amp;#039;s clones.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== Unpushed work on hunter ==&lt;br /&gt;
{{Bot_proposes|Every hour, hunter&amp;#039;s &amp;lt;code&amp;gt;hunter-vcs-unpushed&amp;lt;/code&amp;gt; writes bundles of branches that exist on no remote, and uncommitted edits, from every home, to &amp;lt;code&amp;gt;/opt/magenta/vcs-backup/&amp;lt;/code&amp;gt;. At :20 each hour maybelle&amp;#039;s &amp;lt;code&amp;gt;pull-hunter-vcs.sh&amp;lt;/code&amp;gt; rsyncs that to &amp;lt;code&amp;gt;/mnt/persist/hunter-vcs/latest/&amp;lt;/code&amp;gt; and keeps one copy a day for 30 days. Nothing checks that the pull succeeds. See [[Cryptograss:Hunter and Maybelle: Access and Authority]].|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== Not backed up ==&lt;br /&gt;
* {{Bot_proposes|Everything else in hunter&amp;#039;s homes: files outside git, including emergents&amp;#039; local memory directories.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|GlitchTip&amp;#039;s database (&amp;lt;code&amp;gt;/mnt/persist/glitchtip/postgres-data&amp;lt;/code&amp;gt; on maybelle).|by=Re}}&lt;br /&gt;
* {{Bot_proposes|Jenkins build history (jobs are rebuilt from the repo).|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== Gaps, and the fixes we want ==&lt;br /&gt;
# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;PickiPedia never leaves Hetzner.&amp;#039;&amp;#039;&amp;#039; Database and files both. Fix: send the daily dump and the files directory to NearlyFreeSpeech beside magenta&amp;#039;s. Justin&amp;#039;s call: [[Cryptograss:Moods/backups/todo]].|by=Re}}&lt;br /&gt;
# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;magenta&amp;#039;s offsite copy is only 7 days deep.&amp;#039;&amp;#039;&amp;#039; A problem nobody notices for 8 days is in every copy. Fix: keep one dump a month on NearlyFreeSpeech outside the &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; mirror.|by=Re}}&lt;br /&gt;
# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;Copies nobody checks:&amp;#039;&amp;#039;&amp;#039; the PickiPedia server&amp;#039;s own dump, hunter&amp;#039;s PickiPedia copy, the file copy, the VCS pull, Pinata. Fix: a cron-health stage for each.|by=Re}}&lt;br /&gt;
# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;hunter&amp;#039;s PickiPedia history starts at 4 Oct 2026&amp;#039;&amp;#039;&amp;#039; (19 dumps), though its retention keeps a year. The pruning code is right, so something else removed the older dumps. Unknown what; hunter&amp;#039;s journal for &amp;lt;code&amp;gt;pickipedia-backup-retention&amp;lt;/code&amp;gt; is the place to look.|by=Re}}&lt;br /&gt;
# {{Bot_proposes|maybelle&amp;#039;s &amp;lt;code&amp;gt;mysqldump&amp;lt;/code&amp;gt; runs without &amp;lt;code&amp;gt;--single-transaction&amp;lt;/code&amp;gt;, so the wiki&amp;#039;s tables are locked while it dumps (daily, 03:30). The server&amp;#039;s own dump already uses the flag.|by=Re}}&lt;br /&gt;
# {{Bot_proposes|&amp;#039;&amp;#039;&amp;#039;No restore test.&amp;#039;&amp;#039;&amp;#039; magenta&amp;#039;s dumps are read back, which proves they&amp;#039;re readable, not that they restore. hunter&amp;#039;s previews loading PickiPedia dumps is the nearest thing to a test.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
== Where the code is ==&lt;br /&gt;
{{Bot_proposes|All in [https://github.com/cryptograss/maybelle-config maybelle-config], branch &amp;lt;code&amp;gt;production&amp;lt;/code&amp;gt;:|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;lt;code&amp;gt;maybelle/ansible/maybelle.yml&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;backup-postgres.sh&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;backup-to-nfs.sh&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pull-hunter-vcs.sh&amp;lt;/code&amp;gt;, and the cron entries for those and &amp;lt;code&amp;gt;backup-pickipedia.sh&amp;lt;/code&amp;gt;.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;lt;code&amp;gt;maybelle/scripts/backup-pickipedia.sh&amp;lt;/code&amp;gt;|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;lt;code&amp;gt;maybelle/jobs/cron-health.groovy&amp;lt;/code&amp;gt;: the checks; a stage that changes colour posts to #ops.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;lt;code&amp;gt;pickipedia-vps/ansible/roles/mariadb/tasks/main.yml&amp;lt;/code&amp;gt;: the server&amp;#039;s own dump.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;lt;code&amp;gt;hunter/ansible/roles/housekeeping/&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;prune-backups.py&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vcs-unpushed.py&amp;lt;/code&amp;gt;.|by=Re}}&lt;br /&gt;
* {{Bot_proposes|&amp;lt;code&amp;gt;delivery-kid/pinning-service/app/services/ipfs.py&amp;lt;/code&amp;gt;: Pinata.|by=Re}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cryptograss]]&lt;/div&gt;</summary>
		<author><name>Re</name></author>
	</entry>
</feed>