ROOT
CLAUDE.md
sha256 db741e578dec974d · 5069 bytes ·
original held in the private archive
# _RobCo-Archive — Agent Rules (a pointer, not a rulebook)
This is the **private backup archive** for the RobCo U.O.S. app. It holds `library/`,
`planning/`, `graveyard/`, `memory/`, and the `museum/`, refreshed from the app repo by
`sync.ps1`. `README.md` is the full human-facing tour; this file is the short agent contract.
**It deliberately does not restate the app repo's protocols.** A copy of the rules is a second
source of truth that silently drifts — the exact failure the app's `robco-uos` skill was rewritten
to end. So this file points at the canonical rules and carries **only** what is genuinely
archive-specific and has no other home. Where this file and a self-documenting source (the generator
header, `.gitattributes`, a commit) ever disagree, that source wins.
## The one hard rule
⛔ **Nothing in this repo is ever pushed anywhere public.** The only remote is the private
`zerckzzyHD/_RobCo-Archive`. This history retains `memory/` and internal planning notes, so the repo
**can never be made public** — the planned public exhibit is a *separate* repo built from generated
output only. Never add a remote, never push elsewhere, never open a PR from here.
## Where the shared rules live
For anything not unique to the archive — reporting, batching, the backup/sync mechanism, the 3-class
model, junk sweeps — read the app repo, don't reinvent it:
- **`C:\Dev\!RobCo\!RobCo-UOS\CLAUDE.md`** — the universal contract and protocol numbers. Do not
invent parallel protocol numbers here; reference the app repo's.
- **Protocol 48** (in `rules/docs-and-library.md`) — how `sync.ps1` works, the backup obligation, and
the additive-`planning/` vs mirrored-`library/` split. `sync.ps1` in *this* repo is the
implementation Protocol 48 governs; that protocol is its documentation, not this file.
- **The 3-class model** (`rules/docs-and-library.md` §"3-class library maintenance model") — LIVE /
GENERATED / ARCHIVE, which decides how each folder is kept current.
## Archive-specific invariants — do not revert these
Each was formalized from a real bug. The full rationale lives *in place* at the cited source — go
read it before touching that surface; this table only names the invariant and its home so a session
can't undo it in ignorance.
| Invariant | Why it exists (one line) | Full rationale lives in |
| --------- | ------------------------ | ----------------------- |
| **Generator walks `git ls-files`, not the filesystem** | The filesystem walk leaked a gitignored `README.txt`; only tracked files exist in a fresh clone. | `museum/generate.mjs` `walk()` header (~line 556); commit `76c1970` |
| **Doc page addresses are path-derived, not content-hashed; the redirect ledger covers old hash links** | Content-hashing renamed a page on every edit and killed every inbound link. **Addresses must not move.** | commit `43390e6`; the redirect ledger + generator "REDIRECT LEDGER" section |
| **`.gitattributes` pins everything to LF, deliberately `eol=lf` and NOT `-text`** | The machine's system gitconfig sets `autocrlf=true`; a CRLF checkout renames every page (see addressing above), and `-text` would break the readable publication diff. | `.gitattributes` header (self-documenting); commits `2f4848c`, `5bc7137` |
| **`sync.ps1` writes LF, not PowerShell's default CRLF** | Same page-rename bug, reintroduced at the source instead of on checkout. | commit `5bc7137`; `sync.ps1` |
| **The whole `museum/` subtree is excluded from the manifest walk** | Keeps mockups under `museum/design/` — and all generator tooling/output — from leaking into the museum itself. | `museum/generate.mjs` `walk()` (`rel.startsWith('museum/')` skip) |
## The museum is a RITUAL, not a gate
`museum/generate.mjs` must never block, fail, or delay a release or a sync: it reports and exits 0,
leaving the previous museum intact on any error (`generate.mjs` lines 21, 2413). It is regenerated
**at a release**, pinned to the released tag — not on every sync and never to `dev`. Do not turn any
part of it into something that can fail a sync. **Do not modify `museum/generate.mjs`, `museum/site/`,
or the design mockups** without an explicit instruction to do so.
Its visual identity is **Direction B, "Records Office"** — no terminal bezel, not bound to the
Fallout theme. Approved mockups: `museum/design/2026-07-identity-pass/`.
## Reproducibility is a property — verify it the hard way
A fresh clone must regenerate **byte-identical** output (the generator emits no wall-clock
timestamps). When a change could affect that, verify against a genuinely fresh clone **and** a
clone derived from a bare clone — that double-fresh check is what caught the CRLF-rename and the
gitignored-leak bugs; a local re-run in this working tree would have hidden both.
## Reachability
A session launched in this repo picks up this root `CLAUDE.md` automatically. The `.claude/` here
holds only `launch.json` (the `museum-site` preview server); nothing redirects that convention, so
this file is the correct, auto-loaded home.
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).