<?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%3AOn_The_Pipe</id>
	<title>Cryptograss:On The Pipe - 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%3AOn_The_Pipe"/>
	<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:On_The_Pipe&amp;action=history"/>
	<updated>2026-11-15T07:58:32Z</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:On_The_Pipe&amp;diff=7183&amp;oldid=prev</id>
		<title>Magent: Document the diagnostics chain end to end, and the failure pattern that ran through five separate bugs in September 2026 (via create-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=Cryptograss:On_The_Pipe&amp;diff=7183&amp;oldid=prev"/>
		<updated>2026-09-06T23:40:54Z</updated>

		<summary type="html">&lt;p&gt;Document the diagnostics chain end to end, and the failure pattern that ran through five separate bugs in September 2026 (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;&amp;#039;&amp;#039;&amp;#039;On The Pipe&amp;#039;&amp;#039;&amp;#039; is about whether things come out the far end.&lt;br /&gt;
&lt;br /&gt;
Most of what breaks in this system does not crash. It reports something plausible and wrong, or it reports nothing at all — and in several cases the plausible wrong thing pointed at destroying work that was perfectly fine. This page describes the pipe that a video travels down, where it has silently leaked, and the rules that follow from having been caught out.&lt;br /&gt;
&lt;br /&gt;
== The pattern ==&lt;br /&gt;
&lt;br /&gt;
Five separate bugs found in the first week of September 2026 turned out to share one shape.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! What actually happened !! What the system said&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MemoryError&amp;lt;/code&amp;gt; stringifies to the empty string || &amp;lt;code&amp;gt;Upload error:&amp;lt;/code&amp;gt; — nothing after the colon&lt;br /&gt;
|-&lt;br /&gt;
| Coconut&amp;#039;s &amp;lt;code&amp;gt;job.failed&amp;lt;/code&amp;gt; webhook carried no error field || &amp;lt;code&amp;gt;Unknown error&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| A fire-and-forget task&amp;#039;s result was discarded || nothing, for months&lt;br /&gt;
|-&lt;br /&gt;
| An RPC call 403&amp;#039;d and fell back to an estimator || nothing — and every block height was ten days wrong&lt;br /&gt;
|-&lt;br /&gt;
| A codec failure fell through to a doomed raw-file fetch || &amp;#039;&amp;#039;&amp;quot;The IPFS content may not be available&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
None of these were crashes. Every one of them was the system being confidently unhelpful, and three of them pointed the reader toward destruction:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Re-upload 10.5GB&amp;#039;&amp;#039;&amp;#039; — of a video that was already published and seeding&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;quot;safe to delete from wiki&amp;quot;&amp;#039;&amp;#039;&amp;#039; — of the only page pointing at that video&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Debug IPFS&amp;#039;&amp;#039;&amp;#039; — for a problem that was a missing AV1 decoder in Safari&lt;br /&gt;
&lt;br /&gt;
A failure you cannot read is worse than a crash. A crash tells you where it happened.&lt;br /&gt;
&lt;br /&gt;
== The pipe ==&lt;br /&gt;
&lt;br /&gt;
A video travels a long way, and each hop can fail differently.&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Browser → delivery-kid.&amp;#039;&amp;#039;&amp;#039; The bytes go directly to [[Cryptograss:Delivery-kid|delivery-kid]], never through the wiki. A &amp;lt;code&amp;gt;ReleaseDraft:&amp;lt;/code&amp;gt; page is created first so a failed upload leaves a record rather than vanishing.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Analysis.&amp;#039;&amp;#039;&amp;#039; ffprobe reads duration, resolution and codecs onto the draft.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Encode.&amp;#039;&amp;#039;&amp;#039; AV1 video, Opus audio, HLS in fMP4 segments. See [[Cryptograss:Video encoding pipeline]].&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Pin.&amp;#039;&amp;#039;&amp;#039; The output directory goes to IPFS and returns a CID.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Record.&amp;#039;&amp;#039;&amp;#039; The CID is written to &amp;lt;code&amp;gt;draft.json&amp;lt;/code&amp;gt;, to a ledger that survives cleanup, and to the wiki.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Publish.&amp;#039;&amp;#039;&amp;#039; A bot creates the &amp;lt;code&amp;gt;Release:&amp;lt;/code&amp;gt; page and adds BitTorrent metadata.&lt;br /&gt;
&lt;br /&gt;
Alongside all of it runs a &amp;#039;&amp;#039;&amp;#039;diagnostics chain&amp;#039;&amp;#039;&amp;#039;, whose whole job is to make failure legible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
routes/content.py        _fire_diagnostics_snapshot(state)&lt;br /&gt;
                         fired at every terminal state transition&lt;br /&gt;
     |&lt;br /&gt;
services/pickipedia_client.py    snapshot_diagnostics_for_state_async(state)&lt;br /&gt;
     |&lt;br /&gt;
services/pickipedia_client.py    snapshot_diagnostics(draft_id, payload)&lt;br /&gt;
     |&lt;br /&gt;
            ReleaseDraft:&amp;lt;uuid&amp;gt;/diagnostics&lt;br /&gt;
     ^&lt;br /&gt;
pickipedia, releaseDraft.js      the diagnostics panel reads this page&lt;br /&gt;
                                 when the live fetch 404s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That sub-page is the &amp;#039;&amp;#039;&amp;#039;only&amp;#039;&amp;#039;&amp;#039; copy of a draft&amp;#039;s logs that survives delivery-kid&amp;#039;s storage being rebuilt.&lt;br /&gt;
&lt;br /&gt;
=== Where it leaked ===&lt;br /&gt;
&lt;br /&gt;
It had never worked. Not once, for any draft, since the feature shipped. Four things had to be wrong simultaneously, and each hid the next:&lt;br /&gt;
&lt;br /&gt;
* The wiki API was addressed at &amp;lt;code&amp;gt;/w/api.php&amp;lt;/code&amp;gt;; PickiPedia serves it at &amp;lt;code&amp;gt;/api.php&amp;lt;/code&amp;gt;. Every write 404&amp;#039;d.&lt;br /&gt;
* Sub-pages inherited the &amp;lt;code&amp;gt;release-draft-yaml&amp;lt;/code&amp;gt; content model, whose validator demands a &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; field that a log trail has no reason to carry. Every write was rejected.&lt;br /&gt;
* The mwclient session was cached in a module global and never re-authenticated, so it expired daily and every save afterwards was refused as logged-out.&lt;br /&gt;
* The caller discarded the task result, so all three of the above were invisible.&lt;br /&gt;
&lt;br /&gt;
The tests were green throughout. They asserted that &amp;lt;code&amp;gt;save()&amp;lt;/code&amp;gt; had been &amp;#039;&amp;#039;called&amp;#039;&amp;#039;, which was true, and said nothing about whether a page &amp;#039;&amp;#039;appeared&amp;#039;&amp;#039;, which it never did.&lt;br /&gt;
&lt;br /&gt;
== The rules that fall out ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Never discard a result you asked for.&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;asyncio.create_task(f())&amp;lt;/code&amp;gt; without a done-callback means &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; returning &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; forever is indistinguishable from success.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A fallback must not be silent.&amp;#039;&amp;#039;&amp;#039; When an RPC 403s and an estimator answers instead, the estimator quietly becomes the only code path. Say so, at a level someone will see, and keep saying it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A placeholder must not claim more than it knows.&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;&amp;quot;Unknown error&amp;quot;&amp;lt;/code&amp;gt; asserts that the cause is unknowable. &amp;lt;code&amp;gt;&amp;quot;the service reported a failure with no reason attached&amp;quot;&amp;lt;/code&amp;gt; says where the gap is, which is a different and honest thing.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Never blame a subsystem you have not checked.&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;The IPFS content may not be available&amp;quot;&amp;#039;&amp;#039; was printed about content being served in half a second. It sent two people to debug storage for a codec problem.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Do the safe thing before the risky one.&amp;#039;&amp;#039;&amp;#039; Deleting a source file the instant a pin succeeds is defensible. Deleting it before the CID is written down anywhere is not — and the ordering was the whole bug.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test the far end.&amp;#039;&amp;#039;&amp;#039; A test that asserts a function was called passes happily while nothing arrives. The suite now carries &amp;lt;code&amp;gt;TestOnThePipe&amp;lt;/code&amp;gt;, which asserts a page &amp;#039;&amp;#039;lands&amp;#039;&amp;#039;, with the right content in it.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss:Video encoding pipeline]] — how a video is encoded and published&lt;br /&gt;
* [[Cryptograss:Delivery-kid]] — the machine this runs on, and its storage audit&lt;br /&gt;
* [[44th Bday Cicada Jam]] — the recordings that surfaced all of this&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
</feed>