Gate
The gate is folio check: one offline command that names every problem in a library in one pass and changes nothing. It passes only when no check reports an error.

Every skill runs the gate before it commits, and continuous integration runs the same command. So a broken link, an orphan, a missing field, a placeholder left in a page or an edited record never reaches a reader.

It reads the files as they are and compares the records with git. It never fixes anything: it names each problem with its file and its check, and the skill that made the edit fixes it.

An edit passes through folio check before it can be committed the edit by a skill folio check links each genre's card lifecycles against git maps and orphans ids and indices open questions' quotes the packs' rules one pass, changes nothing commit no error every problem named at once fix, then run it again
The gate sits between the edit and the commit. It does not stop at the first problem: it reports them all, so one round of fixes is usually enough.

What each kind of check catches

Every check has a name, listed in the checks specification, and every problem the gate reports carries the file, the severity, the check's name and what is wrong. Pick a kind of check to see one problem it catches, as the gate reports it. The files in the lines are examples.

Links

Every link and citation resolves, the way the exported site serves it: an href, an id in backticks, a field of type id, a \fcite. A renamed page whose old links were not rewritten shows up here.

content/notes/tiling.html: error broken-link: `/content/concepts/softmx/` resolves to nothing

The card

Each document meets its genre's card: it sits at the card's path, carries the core metadata and the card's fields, uses one of the card's status words, keeps the parts the machine reads (a concept's definition, a map's rows), and leaves no placeholder behind.

locationfieldsstatusplaceholderrequirecitesdefined_once

content/concepts/softmax/index.html: error status: status `done` is not one of draft, live, historical, retired

Lifecycle

A permanent document is compared with its first commit, and a frozen one with the commit that froze it. An edit to a committed journal entry or result is caught here, however small.

content/journal/2026/2026-10-02-switched-the-kernel.md: error permanent: a permanent document has changed since its first commit; restore it and record the change in a new document

Maps

Every document except a journal entry is on a map, or linked from a map or from a document on one. Every map the charter names as a home map exists and is not a draft.

content/notes/loose-idea.html: error orphan: is on no map; add it with `folio map add <map> <doc>`

Ids and indices

Ids are unique across the library whatever the genre, compared without regard to case, and a record id is never reused. The generated indices in .folio/ match what folio index would write.

content/notes/attention.html: error unique-id: id `attention` is also the id of content/entries/attention/index.html; ids are unique across the library, whatever their case

Comments

An open question still quotes text that is on its page. An edit that rewrote the passage a reader asked about fails the gate until the question is answered.

content/entries/attention-cost/index.html: error stale-quote: open thread t3 quotes text no longer on the page: `costs grow with the square of the context`

Pack rules

A pack that is switched on adds rule checks across the whole library. The lab pack's uncited-number asks that a number shaped like a measurement cite a result in the same sentence; cites-superseded flags a revised page that cites a superseded result. The knowledge-base pack's unverified-identifier asks that a source's identifiers be verified.

content/notes/check-speed.html: warning uncited-number: a number looks like a measurement and cites no result in its sentence, item or row; cite the result, or wrap it as not measured

Papers

In a paper, every \fcite resolves, every \cite key is in the library's bibliography, and every figure comes from assets/figures/.

bibfiguresbroken-link

content/papers/attention/main.tex: error bib: has a bibliography of its own; use assets/refs.bib

Error, warning or off

Each check has a default severity. The charter changes it by the check's name, under checks:, so a library decides how strict it is without touching a card.

error

Fails the gate. The skill does not commit until it is fixed.

warning

Reported in the same pass, and the gate still passes. A new lab library starts uncited-number here.

off

Not run. A library that has a reason to skip a check says so in its charter, where every reader can see it.

The trap: expecting the gate to judge quality. It checks what can be checked: shape, links, fields, lifecycles, indices. Whether an argument holds is judged by the agent following its genre's card, and by the owner.

Related

The charter sets each check to error, warning or off. A pack adds rule checks of its own. Every skill that changes a document ends here.

What it holds to git

The gate is why a permanent record stays permanent: the promise is compared with history on every run, not hoped for.