The page registry
The registry is the one file everything in GoToMesh orbits: a committed CSV that lists every page that could exist and what state each one is in. It is the state file — the single source of truth.
What it is
registry/pages.csv is a flat, committed table with one row per page identity. Each row records what the page is (its keywords, section, tier, role, page type), where it lives (its slug), where it sits in the status lifecycle (planned → queued → writing → review → published), and the provenance hashes that record what it was built from. It holds catalogued pages (recorded, no body yet) and built pages alike.
The registry is desired state expressed as a committed artifact. Because it is a plain CSV in Git, every change to the mesh shows up as a reviewable diff, and Git becomes the audit log.
Why it matters
Treating the registry as the state file is what makes the whole engine trustworthy:
- The diff is registry-to-registry. GoToMesh compares the hashes stored in the registry against freshly computed desired state — it never scans your rendered pages to figure out what changed. That is what keeps
planfast and exact. - Re-running
applyis always safe — it only acts where a row actually differs. - Nothing drifts, because there is no second copy of the truth. Mesh links, tiers, and the rest are derived from the registry, not stored on the page.
Never hand-edit registry/pages.csv. It is computed. apply, seal, and the lifecycle commands (promote/demote/publish/…) are its only writers. To change a row, change the input — a keyword pull, a config rule, a reference table — and re-plan.
How it works
You change an input and run gtmesh apply. The engine recomputes desired state, diffs it against the committed registry by identity, and emits one action per row (catalogue, create, recompute, rewrite, restamp, redirect, prune, or noop). The actions are what update the rows. seal later stamps the three built_* provenance hashes that make the next diff precise.
A row’s identity is a composite key — parent_topic, page_type, discriminator (and market once you have more than one). Two rows with the same identity are the same page, which is how the diff knows what to compare against.
Key files & flags
| Thing | What it is |
|---|---|
registry/pages.csv | The committed state file — one row per page identity |
registry/redirects.csv | The durable redirect ledger (old slug → current) |
gtmesh plan | Read-only: recompute desired state, print the diff |
gtmesh apply | The writer: enact the diff into the registry |
gtmesh apply --prune | Also remove carried-forward rows and their bundles (destructive) |
Related
plan— compute the registry-to-registry diffapply— the only writer of the registry- The mental models — the registry-as-state idea in full
- Glossary — registry, identity, desired state, built hashes