The marketplace indexer validates manifest.json on upload. These failures cause the block to be rejected:
- Missing required fields. All top-level keys are required.
- id/name mismatch. The
idmust matchnameinruntime/block.jsonexactly. - Empty string values.
archetype,category,layoutType,sectionRole, andcomplexitymust be non-empty strings. - Invalid complexity value. Only
"basic","intermediate","advanced"are accepted. - contentModel missing ai_fill coverage. Every attribute holding user-authored text content must have an explicit entry. Missing a content field is flagged – absence is not the same as
false. - dynamic/render mismatch. If
"dynamic": truebut norender.phpexists inruntime/, the indexer flags the mismatch as a warning.
Attribute Name Conventions
Attribute names in block.json and aifill keys must use camelCase. Never use snakecase, kebab-case, or PascalCase for block attributes.
// ✅ Correct
"ai_fill": {
"sectionHeading": true,
"btnText": true,
"showButton": false
}
// ❌ Wrong
"ai_fill": {
"section_heading": true,
"btn-text": true,
"ShowButton": false
}
The aifill key itself uses snakecase because it is a manifest-level configuration key, not a block attribute name.