Skip to content
HomePagesHomePages template kit
Menu

template-kit/manifest-invalid

The template-kit/manifest-invalid authoring rule — what it enforces, why, and how to fix it.

manifest.json is the one file that says which sections make a page, and in what order. Every check on it lands under this id.

A template folder (templates/<key>/) must have a manifest.json at its root, and that file must:

  • exist — a template folder with none at all reports this once, naming the missing file;
  • parse as JSON, and satisfy the manifest shapekey, name, deliverable_type, and an ordered sections array of section instances (section, instance_id, options, locked, required, reorderable);
  • agree with its own folder — the manifest’s key must match the template folder name it lives in;
  • reference real sections — every sections[].section must resolve to a section this workspace actually has;
  • override only what’s real and overridable — an instance’s options may only name an option the target section declares, only when that option is not template_overridable: false, and only with a value that actually differs from the section’s own default;
  • satisfy the whole-composition nav contract — the cross-section rules that need the full, resolved section set rather than any one section in isolation.

Every violation collects into the same run; a manifest with several wrong references reports all of them together.

A section’s own four files describe that section in isolation — they say nothing about which page it appears on, in what order, or which of its options a specific template has chosen to lock in. manifest.json is where that composition is declared, and it is the only place a downstream consumer (the publisher, the fill pipeline, the editor) can go to learn a template’s actual shape. A manifest that references a section that doesn’t exist, or restates a default as if it were an override, is a template whose real composition nobody can trust the manifest to describe.

Read the message: it names the template, the section instance, and what’s wrong. Missing entirely, add one. Otherwise, fix the field the message points at.

templates/acme-modern/
manifest.json
sections/
hero/
templates/acme-modern/manifest.json
{
"key": "acme-classic",
"name": "Acme Classic",
"deliverable_type": "single_property_website",
"sections": [
{ "section": "hero", "instance_id": "hero-1", "options": {}, "locked": [], "required": true, "reorderable": false }
],
"reconcile": []
}
Template "acme-modern": manifest key "acme-classic" does not match the template folder name "acme-modern".
templates/acme-modern/manifest.json
{
"key": "acme-modern",
"name": "Acme Modern",
"deliverable_type": "single_property_website",
"sections": [
{ "section": "hero", "instance_id": "hero-1", "options": {}, "locked": [], "required": true, "reorderable": false }
],
"reconcile": []
}
  • The schema system — what a manifest declares and the type it’s validated against.
  • schema-invalid — the same kind of cross-reference check, one level down, on a single section’s own contract files.
  • no-templates — reported instead when the workspace has no templates/<key>/ folder to check at all.