MEMORY
memory/project-C--Dev--RobCo--RobCo-Archive/museum-lf-normalization.md
sha256 9d2d55722db1f6a2 · 1478 bytes ·
original held in the private archive
---
name: museum-lf-normalization
description: "The archive is LF-only via .gitattributes; the museum generator content-hashes inputs, so EOL matters a lot"
metadata:
node_type: memory
type: project
originSessionId: 3e4faaa8-ab7b-4f3a-ab11-02989d3ddb5c
modified: 2026-07-21T01:12:16.046Z
---
Repo-root `.gitattributes` (`* text=auto eol=lf`, `*.png`/`*.zip binary`) forces LF
on checkout, overriding the machine's system-level `core.autocrlf=true`. This exists
because `museum/generate.mjs` names each doc page `docs/<sha256(rawBytes)[:12]>.html`
— it content-hashes its **inputs**, so a CRLF checkout doesn't just add `\r`, it
**renames generated pages** and re-churns the whole museum. Chose `eol=lf` (text),
not `-text`, so `git diff` stays line-readable for the publication diff.
`sync.ps1` was rewritten to emit LF (its `WriteAllLines` used `Environment.NewLine`
= CRLF, which had baked CRLF hashes for `_CAPTURE_MANIFEST.txt`,
`_CAPTURED_STORES.txt`, `ARCHIVE_RETAINED.md`, `AUDIT.md` into the committed museum).
Proving a determinism/EOL fix here: a **local** regen is worthless (the working copy
is already LF). Must **clone fresh** (from the remote), regen with
`MUSEUM_APP_REPO=../!RobCo-UOS`, copy `museum/.cache` in (gitignored thumb cache, else
Playwright runs), and confirm `git status` clean. Caveat: [[museum-readme-txt-leak]]
means a *bare* clone (no README.txt) still shows a residual — keep README.txt present
to isolate line-ending behavior.
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).