Files
twislaandClaude Sonnet 5.5 6e54658ba4
Site / build (pull_request) Successful in 9s
Site: the devlog, the blog's roro9stack posts in the site's style; Devlog replaces Blog in the navigation
Seven posts imported into site/content/devlog/ with their text unchanged,
links between them pointing to /devlog/, and shortcodes (sign, cast, steps,
asides, folded sections, diagrams, captions) restyled in the site's palette.
The 17 inline SVG diagrams carried <style> blocks and style attributes the
site's Content-Security-Policy refuses: their rules moved to
devlog-diagrams.css, and a diagram's minimum width is a class. An Atom feed
at /devlog/atom.xml.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
2026-10-06 20:51:33 +02:00

60 lines
4.6 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 330" role="img" aria-label="The path of one Gemini fetch. The Gemini App asks for a URL and goes on drawing. A short-lived Gemini task opens a TLS connection to port 1965 with verification off, reads the server's certificate fingerprint and compares it with the one pinned for that host: the first time it pins it, if it changed it stops and the App asks. It sends the URL, reads the status line, and streams the body to a cache file on the SD card in 1 KB pieces, each written by the storage task. The connection closes and its memory comes back. Then the page is loaded into memory from the card, as far as the 40 KB floor allows; a bigger page is windowed and read as you scroll. The App gets the page.">
<defs>
<marker id="gx-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="currentColor"/></marker>
<marker id="gx-arrow-hot" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="f-accent" d="M0,0 L10,5 L0,10 z"/></marker>
<marker id="gx-arrow-bad" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="f-red" d="M0,0 L10,5 L0,10 z"/></marker>
</defs>
<g font-family="JetBrains Mono, ui-monospace, monospace" fill="currentColor">
<rect class="gx-panel" x="16" y="20" width="150" height="70" rx="8"/>
<text x="28" y="44" font-size="12" font-weight="600">Gemini App</text>
<text x="28" y="64" font-size="11" class="gx-dim">asks, then keeps</text>
<text x="28" y="80" font-size="11" class="gx-dim">drawing</text>
<rect class="gx-hot" x="210" y="20" width="534" height="200" rx="8"/>
<text x="224" y="42" font-size="12" font-weight="600">Gemini task (one job at a time, gone when idle)</text>
<rect class="gx-box" x="224" y="56" width="150" height="66" rx="6"/>
<text x="236" y="76" font-size="11" font-weight="600">1 TLS, port 1965</text>
<text x="236" y="94" font-size="10" class="gx-dim">fingerprint vs</text>
<text x="236" y="108" font-size="10" class="gx-dim">the pinned one</text>
<rect class="gx-box" x="392" y="56" width="150" height="66" rx="6"/>
<text x="404" y="76" font-size="11" font-weight="600">2 URL, status</text>
<text x="404" y="94" font-size="10" class="gx-dim">"20 text/gemini"</text>
<text x="404" y="108" font-size="10" class="gx-dim">or 1x 3x 4x 5x</text>
<rect class="gx-box" x="560" y="56" width="170" height="66" rx="6"/>
<text x="572" y="76" font-size="11" font-weight="600">3 body to the card</text>
<text x="572" y="94" font-size="10" class="gx-dim">1 KB pieces, by the</text>
<text x="572" y="108" font-size="10" class="gx-dim">storage task</text>
<rect class="gx-box" x="392" y="142" width="150" height="62" rx="6"/>
<text x="404" y="162" font-size="11" font-weight="600">4 connection</text>
<text x="404" y="178" font-size="11" font-weight="600"> closed</text>
<text x="404" y="194" font-size="10" class="gx-dim">~45 KB back</text>
<rect class="gx-box" x="560" y="142" width="170" height="62" rx="6"/>
<text x="572" y="162" font-size="11" font-weight="600">5 into memory</text>
<text x="572" y="178" font-size="10" class="gx-dim">as far as 40 KB allows;</text>
<text x="572" y="194" font-size="10" class="gx-dim">bigger: windowed</text>
<path class="gx-line" d="M374 89 H388" marker-end="url(#gx-arrow)"/>
<path class="gx-line" d="M542 89 H556" marker-end="url(#gx-arrow)"/>
<path class="gx-line" d="M645 122 V128 H467 V138" marker-end="url(#gx-arrow)"/>
<path class="gx-line" d="M542 173 H556" marker-end="url(#gx-arrow)"/>
<path class="gx-line-hot" d="M166 55 H206" marker-end="url(#gx-arrow-hot)"/>
<text class="f-accent" x="172" y="48" font-size="10">URL</text>
<path class="gx-line-hot" d="M645 204 V260 H91 V94" marker-end="url(#gx-arrow-hot)"/>
<text class="f-accent" x="300" y="254" font-size="10">the page, or a window of it</text>
<rect class="gx-warn" x="224" y="142" width="150" height="62" rx="6"/>
<text class="f-red" x="236" y="162" font-size="11" font-weight="600">changed?</text>
<text x="236" y="178" font-size="10" class="gx-dim">stop; the App shows</text>
<text x="236" y="194" font-size="10" class="gx-dim">both, and asks</text>
<path class="gx-line-bad" d="M299 122 V138" marker-end="url(#gx-arrow-bad)"/>
<text x="16" y="300" font-size="11" class="gx-dim">No card: steps 3 and 5 happen in memory instead, under the same two floors.</text>
</g>
</svg>