Skip to content
The archive
Technical notes

Provenance belongs in the schema, not the README

Why this site stores essays and VECTOR documents in two different tables, and why the publish path refuses rather than warns.

AI-assisted draftReviewed 2 Aug 2026 by Vihaan Vaghela

A note about the archive you are currently reading, rather than about VECTOR.

This site stores personal essays and VECTOR documents in two separate tables. They hold what looks like the same thing — a slug, a title, a body of markdown, a publication status — and merging them would remove a model, a set of queries and a studio screen.

They are separate because they have different provenance, and provenance that lives in a README is a claim rather than a property.

The two rules

An essay is human-written. The Post model has no field recording an AI contribution, and the absence is the design: there is never one to record. The moment that model gains an aiAssisted column, the rule has changed, and the schema will say so before any prose does.

A VECTOR document is AI-assisted and then reviewed. VectorDoc carries aiAssisted, reviewedAt and reviewedBy, because that is the actual pipeline. The documentation is drafted with assistance and then read by a person.

Why refusal rather than a warning

Publishing an AI-assisted document with no reviewedAt is refused in code.

The alternative — a warning, a checklist item, a note in the contributing guide — depends on someone caring at the exact moment they are trying to ship something. That is the worst possible moment to rely on. A step that nothing enforces is a step that gets skipped, and the first time it gets skipped is the first time the site tells a reader something untrue about how its own contents were made.

The honest way to say "a human read this" is to make it impossible to publish otherwise.

The generalisation

This is the same argument as Terminus. If a property matters, encode it where it cannot be forgotten — in the schema, in the type system, in the path that has to succeed. Documentation describes intentions. Structure enforces them. The companion case, where a property is deliberately not enforced by structure and the honest thing is to say so, is a console with no URL.

Every document in this archive seeded as an unreviewed draft, and none of them could reach you without a person opening them first.