Site: the devlog, the blog's roro9stack posts in the site's style; Devlog replaces Blog in the navigation
Site / build (pull_request) Successful in 9s

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
This commit is contained in:
2026-10-06 20:51:33 +02:00
co-authored by Claude Sonnet 5.5
parent 2729f2e218
commit 6e54658ba4
61 changed files with 2832 additions and 4 deletions
@@ -0,0 +1,43 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 196" role="img" aria-label="The Update File: a 160-byte header, then the firmware image. Bytes 0 to 79 are signed: the magic RORO-OTA, the format, the header size, the image size, the image's SHA-256 and the version. Then the signature's length, the signature itself, and reserved bytes up to 160. The signature is ECDSA P-256 over the SHA-256 of bytes 0 to 79, checked before anything is written. The image follows, hashed while it is written, and must match the hash in bytes 16 to 47.">
<g font-family="JetBrains Mono, ui-monospace, monospace" fill="currentColor">
<text x="16" y="22" font-size="13" font-weight="600">Update File (.ota)</text>
<text x="16" y="40" font-size="11" class="uf-dim">a 160-byte header, little-endian, then the image</text>
<rect class="uf-signed" x="16" y="72" width="380" height="40" rx="4"/>
<rect class="uf-cell" x="16" y="72" width="64" height="40"/>
<rect class="uf-cell" x="80" y="72" width="40" height="40"/>
<rect class="uf-cell" x="120" y="72" width="40" height="40"/>
<rect class="uf-cell" x="160" y="72" width="52" height="40"/>
<rect class="uf-cell" x="212" y="72" width="100" height="40"/>
<rect class="uf-cell" x="312" y="72" width="84" height="40"/>
<rect class="uf-cell" x="396" y="72" width="40" height="40"/>
<rect class="uf-cell" x="436" y="72" width="92" height="40"/>
<rect class="uf-cell" x="528" y="72" width="32" height="40"/>
<rect class="uf-image" x="560" y="72" width="184" height="40"/>
<g font-size="10" text-anchor="middle">
<text x="48" y="96">RORO-OTA</text>
<text x="100" y="96">fmt</text>
<text x="140" y="96">hdr</text>
<text x="186" y="96">size</text>
<text x="262" y="96">image SHA-256</text>
<text x="354" y="96">version</text>
<text x="416" y="96">len</text>
<text x="482" y="96">signature</text>
<text x="544" y="96">0…</text>
<text x="652" y="96">the image, ~1.6 MB</text>
</g>
<g font-size="10" class="uf-dim" text-anchor="middle">
<text x="16" y="64">0</text><text x="80" y="64">8</text><text x="120" y="64">10</text><text x="160" y="64">12</text>
<text x="212" y="64">16</text><text x="312" y="64">48</text><text x="396" y="64">80</text><text x="436" y="64">82</text>
<text x="528" y="64">154</text><text x="560" y="64">160</text>
</g>
<path d="M16 120 V128 H396 V120" fill="none" stroke="var(--accent)" stroke-width="1.5"/>
<text x="206" y="150" font-size="11" text-anchor="middle" class="uf-hot">signed: ECDSA P-256 over SHA-256(bytes 0–79)</text>
<text x="206" y="168" font-size="11" text-anchor="middle" class="uf-dim">checked before a single byte is written</text>
<path d="M560 120 V128 H744 V120" fill="none" stroke="currentColor" stroke-opacity=".5" stroke-width="1.5"/>
<text x="652" y="150" font-size="11" text-anchor="middle" class="uf-dim">hashed while it's written;</text>
<text x="652" y="168" font-size="11" text-anchor="middle" class="uf-dim">must match bytes 16–47</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB