Skip to content

Agent Operating Guide

/coach-schema-validate

Lint a schema JSON file against the bulk-import format, catching the silent-failure modes that would be rejected or dropped at import before you paste it.

The pre-flight check before you paste JSON into the admin Bulk Import page. The skill reads a schema JSON file and reports every violation of the bulk-import contract, separating errors, which fail the import or silently drop a section, from warnings, which import cleanly but are probably mistakes. It never edits the file: it reports, you fix, you re-run. Both /coach-schema-design and /coach-starter-pack run it as a hard gate, so a schema they produce is already validated. It’s a local file lint: no tenant access, no suggest_change.

Any time you’re about to paste schema JSON into /en/admin/bulk-import: especially a hand-edited file or one exported from another tenant. Run it and fix every error before you import; a clean report means the file will land completely.

Flag Required Notes
--file <path> Yes The schema JSON to lint. If omitted, the skill lists the available schema files to pick from.

/coach-schema-validate --file .coworkcanvas/schemas/acme-2026-07-11.json parses the file and prints a report: error, warning, and info counts up top, then one entry per issue with its file path and field path and a suggested fix. A clean file gets a single line confirming it’s ready for the Bulk Import page.

  • It catches the five silent-failure modes that import as 200-success but don’t fully land, all as hard errors: the lowercase fields array instead of FieldDefinition; data.items as an array instead of an object keyed by item-type slug; relationTarget instead of relatedItemTypeSlug; MULTISELECT_RELATION instead of RELATIONS; and URL/FILE/EMAIL instead of TEXT.
  • The recognizable symptom of the items-as-array bug is an import result that renders items: 0: [object Object], 1: [object Object], …: the validator flags it before you ever see that.
  • It also catches structural problems: a missing top-level data wrapper (rejected with “missing data field”), slug collisions when overlaying a pack on an existing schema, and RELATION targets pointing at slugs that don’t exist.