Back to notes

System note

The wallpaper is a build artifact

A 48-second generated loop stays out of Git, and ~21 MiB of tracked source, manifests and receipts identify ~2.2 GiB of untracked media and verify any retained or reconstructed copy. That buys identity, not availability or reproducibility — the gates taught the rest.

creative tooling / Published Aug 3, 2026 / Revised Aug 4, 2026

Explore this note with AI

Apply and challenge it in your own context.

A post-hoc prompt for applying and extending this note. It is not a reconstruction of how the note was written.

Use this note as a worked instantiation, not a rule to adopt wholesale. The transferable question: when a large generated artifact cannot live in version control, what must the tracked files carry so authority over the artifact survives the exclusion? This instantiation is a generative video pipeline — 48.000 s, 1152 frames, 960x412, seed 730021 — where about 21 MiB of source, receipts and dispositions identify about 2.2 GiB of untracked media. Its conclusions: the receipt's per-artifact sha256 buys identity but not availability or reproducibility; regeneration from a seed is reconstruction to be hash-checked, not an equivalent source; a gate must declare the artifact class it applies to, since the continuity limit that qualifies a lossless master is meaningless against lossy delivery encodes; a ratio gate can be passed by inflating its own denominator, so it needs an independent quality measure beside it; and a whole-frame aggregate hid three subsystems repeating exactly. Apply the question to a large derived artifact you own — a trained model, a dataset snapshot, a built image. Name where your constraints diverge: nondeterministic production, unreplayable inputs, retention rules, consumers who need the bytes more than the contract. Say which conclusions survive. Produce the receipt schema and gate list you would enforce, including which artifact class each gate is valid for.

On this page

The video is not in Git. The hashes that identify and verify it are. The Wizard Valley World-Window repository tracks about 21 MiB across ~147 files — renderer source, scene and mask definitions, layer manifests, receipts, dispositions, provenance notes — and excludes about 2.2 GiB of video, frame sequences, source plates and review crops. Every receipt records the sha256 of every artifact it describes, so the tracked files bind each named artifact to a digest.

This is the concrete case behind an argument I made abstractly in Derived status is earned: generation does not make an artifact disposable, assurance does. The build in question is v3b-pipeline-001 — 48.000 seconds, 1152 frames, 960x412 at 24 fps, seed 730021, four motion systems, rendered from scene-v3b-48s.json. Authoring coordinates are expressed against 3840x1648; the 960x412 proof is a downscaled view of those coordinates, not an independent mask space.

Nothing has been promoted to a delivery selection. That fact survives to the end of this note.

Why the media is not tracked

Two independent reasons, either sufficient alone.

LFS is disabled server-side. The self-hosted Git service never starts its LFS backend, so the LFS routes are not registered at all. Verified 2026-08-03: the batch endpoint returns 404 even with a valid token and correct application/vnd.git-lfs+json negotiation, while the REST API returns 200 and git ls-remote succeeds. Both the HTTPS and SSH failures trace to that single cause.

Even enabled, this media would not belong there. The backing volume is sized for repository data and shared with it, in tens of gigabytes. One build is ~1.9 GiB; projected 3840x1648 masters reach 136-204 GiB.

The first attempt taught the sharper lesson. An LFS filter rule against a server with LFS disabled does not fail at commit time — it fails at push, after the object has already been written into .git/lfs. That is how the aborted import produced a 1.9 GiB .git/lfs directory for a push that could never succeed. .gitattributes now carries an explicit note that it has no LFS rules deliberately, and the standing instruction is to reintroduce filter rules in the same commit that starts tracking media, never before.

Integrity without Git

Excluding media from Git does not surrender byte identity: the tracked files bind every named artifact to a digest. That does not provide retention or recovery.

  • receipt.json per build — every encode and review artifact, with sha256;
  • master/frames.sha256 — a per-frame manifest, sha256sum -c compatible;
  • render-report.json — renderer outputs.

Four properties are easy to run together and worth keeping apart:

identity        per-artifact sha256
availability    storage, backup and recovery policy
reproducibility pinned source, inputs, toolchain and environment
acceptance      scoped automated gates plus human promotion

For this unpromoted pipeline proof, byte identity is the claimed boundary. Availability is not claimed, because nothing has been promoted. Reproducibility is explicitly incomplete, for reasons the next section makes visible. A promoted delivery would need its own storage, backup and recovery policy. A digest can tell whether recovered bytes are the right bytes; it cannot recover them.

Git LFS object IDs are themselves plain sha256, so the two schemes agree exactly. That was verified rather than assumed: during the aborted import, the layered master’s LFS OID 79ce9b77... matched the hash already committed in render-receipt-v2.json verbatim. If media is migrated into LFS later, the OIDs will equal hashes the repository has been asserting all along.

The master itself is an FFV1 level 3 gbrp intra-only file, 782,391,962 bytes, with a decode round-trip recorded in the receipt: 1152 frames decoded, 32 compared, maximum absolute 8-bit delta 0.

Regeneration is not equivalence

The tempting claim is that a seed makes the media disposable: delete it, re-run, get it back. The repository refuses that framing. The render is deterministic in seed, but the frames/ sequences are designated authoritative by the receipts, so regeneration is reconstruction to be hash-checked — not an equivalent source.

The binding block shows why the weaker claim is the honest one. It records the scene hash, the seed, per-file renderer source hashes, and repo_commit 90fb35d — alongside repo_dirty: true. And environment_lock_sha256 is e3b0c442..., which is the sha256 of empty input: the environment lock is a declared field with nothing in it. Toolchain identity is the weakest link in this chain today, and the receipt is at least honest enough to make that visible.

Gates, and what a gate is valid for

The automated gates are real rejection mechanisms:

  • architecture lock, now measured on every delivered frame — maximum absolute 8-bit delta against frame 0, outside the permitted masks, limit 0, measured 0.0. It replaces an earlier gate that checked frame 0 only;
  • keyframe census — internal IDR frames per candidate;
  • envelope independence — 0.007 against a limit of 0.8, testing whether two systems that both land on 10 cycles per loop had manufactured a shared envelope. Measured, they had not;
  • semantic change precision and a static holdout flow check.

Then the interesting one. The legacy loop-continuity metric divided the wrap step by max(first_transition, last_transition). Those two samples have no privileged statistical meaning: the same wrap on the same render scores 1.161 against them, 1.057 against the median, 0.856 against q95, and 0.339 against the maximum. That is denominator roulette, not measurement.

It was resolved by replacing the metric, not the limit. The replacement divides the wrap step by the q99 of all 1151 interior transitions, nearest-rank so the denominator is a value that actually occurs in the data: step ratio 0.782, acceleration ratio 0.847, limit 1.10, pass. The legacy number is still recorded and explicitly marked non-gating.

The part I would not have anticipated is that the limit needed a declared scope. The FFV1 master and the lossless HEVC review target agree to 0.03 (0.782 against 0.809), so 1.10 is a master/source gate and the lossless target is a faithful proxy for it. Every lossy delivery encode fails 1.10, because compression noise at a cold IDR dominates the wrap step. Delivery encodes need their own calibrated threshold and must not be judged against this one. A gate with no declared artifact class is a gate that will eventually reject correct work.

Two ways the evidence tried to lie

A ratio can be passed by inflating its denominator. One encode candidate applied x265 q=14 zones over the 24 frames either side of the wrap. It does fix the wrap — step ratio 1.085 against plain CRF 20’s 4.858 — but it degrades the rest of the loop, costs 115x the bitrate (88 MB against 764 KB), drops SSIM from 0.992 to 0.948, and trips the keyframe census with 1152 internal IDRs. Part of how it “passed” continuity was making ordinary motion noisier. That is why every candidate also records SSIM and VMAF: a self-normalising ratio gate needs an independent quality measure beside it. Continuity ranking and quality ranking disagree in this data, and they are different questions.

A first attempt at that encode used crf=14, which is not a valid x265 zone option. x265 accepted the parameter string without complaint and did something else — frames 0-23 came out five times worse than plain CRF 20, and the second zone was ignored outright. That encode is deliberately retained so the failure stays visible. An encoder that accepts a typo silently is the same class of hazard as a mask that composites everywhere without erroring.

An aggregate can hide a subsystem. The whole-frame repeating-energy statistic at T/2 read 0.14 — which parses as “barely repetitive”. Measured per system at a 24-second offset: waterfall 3.4e-10, ripples 4.0e-10, orb exactly 0.0, steam 2.0e-3. Every declared cycle count is even, so their gcd is 2, and three of the four systems return to phase and repeat exactly at 24 seconds inside a 48-second loop. Only packetized steam prevents whole-frame duplication — and steam dominates the frame-wide mean, which is precisely why the aggregate could not see it. A whole-frame statistic cannot see a single system.

Disposition: acceptable for a pipeline proof, not for final temporal variety, and explicitly do not retune this build — preserving already-approved motion rates was the point of choosing 48 seconds as exactly twice the reviewed 24-second proof. A final 120-180 second piece requires either a cycle-count gcd of 1 among perceptually significant systems, or dominant long-period stochastic systems that measurably prevent the shorter repetition.

The gates do not say it is good

An earlier build, v3a-proof-001, passed every automated gate and then failed human motion review. It remains immutable in the tree with that disposition recorded.

v3b-pipeline-001 passed its human gate on 2026-08-03 — “complete scene remains calm, no visible hard wrap, accepted motion behavior is retained” — and still nothing is promoted. Three of the four remaining pipeline gates are closed; selected-delivery post-encode review is open, because it requires a human selection first. Seven encode candidates exist, each derived from the master and never from another delivery encode, and none of them is a delivery selection.

The resulting boundary

tracked (~21 MiB):    renderer source, scene and mask definitions,
                      receipts, dispositions, frame manifests, specs
untracked (~2.2 GiB): masters, delivery encodes, frame sequences,
                      plates, review crops
bridge:               per-artifact sha256 in the receipt
authority:            gates reject broken output within a declared
                      artifact class; a human promotes a candidate

The rule generalizes past video: an artifact can be excluded from version control exactly to the extent the tracked files can say which bytes were meant. A digest preserves identity; storage preserves availability; a pinned environment supports reproducibility. This repository has strong identity evidence, no promoted artifact requiring durable availability, and an explicitly incomplete reproducibility claim, because the environment lock is empty.

That is a narrower result than “the receipts prove the media,” and it is the one the evidence supports. A hash of a thing you no longer have is a falsifiable identity claim, not a recovery plan.

Wizard Valley stays a note rather than a project page. One pipeline proof with nothing promoted is not a continuing operated capability, and a project page is supposed to describe a bounded effort with current verified state — not an idea that has acquired a good diagram.