GRAPH.md

Shape only.

What validation catches is drift: the file saying something the store does not, a relation name that does not exist, or a file grown too long for anyone to read.

Running it

vinc graph-md check --owner you --file GRAPH.md

Point it at a file, or at the copy inside Vinc with --doc. To check shape without a store, use --no-store.

It exits three ways: 0 clean, 1 things to tidy, 2 something wrong. In CI you can gate on 2 alone.

The nine

Four look only at the file, four compare it against your store, and one compares it against the code.

MarkerIs the spec marker on the first lines. Without it there is no telling what this file is.
Section orderAre the required sections present and in order.
Generated blockIs there exactly one marker pair, the right way round.
DriftDoes the generated region still match the store. The one that matters most.
Relation namesDoes every relation exist: the built in six plus your approved vocabulary.
Topic namesDo the listed topics actually exist.
Tool namesIs each vinc_* in the text a tool that exists. A stale name sends your assistant after something that is not there.
LengthOver 70 lines (tidy), over 100 lines (wrong).
Forbidden glyphsCharacters we do not put on screen.
Drift is an error, not a warning. When the file says something the store does not, the assistant follows the file, and a quietly wrong graph starts piling up.

What it never does

Whether a concept is the right size, whether that relation is the right one, whether these are good conventions at all: none of that is checked.

Those are judgments, and judgment belongs to the assistant. A checker that pretended otherwise would be the first thing to cross the line this product draws. Machines take the shape; people and assistants take the meaning.

So a passing file is not a promise that your conventions are good. It is a promise that they are not lying.