gtmesh validate
Checks page YAML against its schema and the deterministic editorial lints, and (when run over the whole project) verifies your committed input files against the engine’s column contracts.
gtmesh validate [slugs…] # all scaffolded pages, or just the ones you nameWhat it does
gtmesh validate is the read-only checker the writer leans on. It runs two passes on each page:
- Schema — the page’s structured YAML is validated (via ajv) against its per-type schema in
schemas/. - Editorial lints — the deterministic, rule-based checks (banned words, structural rules, and so on) that don’t need a model.
Run it with no slugs and it does one extra thing: it also checks your committed inputs — reference tables, seed pages, and discovery seeds — against the engine’s column contracts. That catches a malformed CSV before it ever reaches plan/apply.
It writes nothing. It’s the same gate gtmesh seal enforces, exposed so you can run it as often as you like — it’s the writer’s self-check before sealing. A page that doesn’t validate cannot seal.
Arguments & flags
| Argument | Description | Default |
|---|---|---|
[slugs…] | Page slugs to validate | Every scaffolded page (and committed inputs) |
There are no command-specific flags. The global options (--project, --json, --quiet) apply.
Reads & writes
- Consumes: the named page bundles (or all of them); their per-type schemas in
schemas/; and, when run with no slugs, the committed input CSVs (reference tables, seed pages, discovery seeds). - Produces: nothing — output goes to your terminal. Read-only.
- Commits: nothing.
Examples
gtmesh validate # every page + all committed input CSVs
gtmesh validate /glossary/water-pump # just one page
gtmesh validate --json # machine-readable results for CIRelated
- Writer & quality gate — where validate sits in the authoring loop.
- Lifecycle & reconcile — validate vs. seal.
- Create walkthrough — the end-to-end authoring story.