Plate № 43 · Foundation · scaffolding & baseline

A pattern from the gf.cx specimen book

Edit the generator, not its output

A page that's regenerated from data will overwrite anything you hand-add to it — so durable content has to come from the thing that prints the page, not the print.

The pattern

"When a page is generated, its content lives in the generator. Add a section by emitting it from the renderer — gated to the one surface it belongs to — never by editing the rendered HTML, which the next build silently overwrites. The render is the source of truth: edit the press, not the print."

The worked example → status.gf.cx/pool Kin → reconcile onto the template

The problem

status.gf.cx/pool is rendered daily by a snapshot generator (gfcx_offsite_storage_snapshot.py) from a read-only view of the box's storage. When the ask came in — document why this box runs mergerfs + SnapRAID and not ZFS — the tempting move was to paste a comparison table straight into pool/index.html. It would have looked done… and been gone by morning: the next daily render rewrites that file wholesale. The generator even carries a scar from exactly this mistake — a comment marks an earlier hand-added section (commit ead01ae) that a later rebuild silently wiped, because the rebuild was blind to anything not in the renderer.

The shape

Why it works

The render is the source of truth. Anything not expressed in the generator is provisional — true only until the next build fires. Moving the content into the generator makes it exactly as durable, as version-controlled, and as reviewable as the page it prints; and because it's gated, it ships to one surface without leaking onto its siblings. You stop maintaining an artifact the machine is about to overwrite, and start maintaining the machine.

When it breaks

Where it applies

Reusable elements

Reference

Worked example
status.gf.cx/pool — the mergerfs-vs-SnapRAID-vs-ZFS comparison table and "Sources & community consensus" section, both emitted from the pool renderer.
Generator
gfcx_offsite_storage_snapshot.py (mirrored in xlab-co-toolkit) — COMPARISON_TABLE / SOURCES_SECTION constants, emitted behind slug == "pool".
Origin
2026-09-04 — "Are we using ZFS?" answered with a durable on-surface explainer instead of a chat screenshot; the renderer's ead01ae scar is why.
Kin
reconcile onto the template (the generated artifact is authoritative; hand-edits are the drift) · the ledger (native shelf structure) · built-with footer (one source, every surface).