{"record":{"id":"3e42c3e22c72f8b0","repo":"medusajs/medusa","slug":"zone-and-tab-properties-at-the-j-index-of-t","errorCode":null,"errorMessage":"'zone' and 'tab' properties at the ${j} index of the 'forms' property are not a valid for the '${model}' model. Received: { zone: ${zone}, tab: ${tab} }.","messagePattern":"'zone' and 'tab' properties at the (.+?) index of the 'forms' property are not a valid for the '(.+?)' model\\. Received: (.+?)\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts","lineNumber":342,"sourceCode":"      tab = tabProperty.value.value\n    }\n\n    if (tab && !isValidCustomFieldFormTab(tab)) {\n      logger.warn(\n        `'tab' property at the ${j} index of the 'forms' property is not a valid custom field form tab for the '${model}' model. Received: ${tab}.`,\n        { file }\n      )\n      return\n    }\n\n    const zone = zoneProperty.value.value\n    const fullPath = getFormEntryFieldPath(model, zone, tab)\n\n    if (\n      !isValidCustomFieldFormZone(zone) ||\n      !isValidCustomFieldFormFieldPath(fullPath)\n    ) {\n      logger.warn(\n        `'zone' and 'tab' properties at the ${j} index of the 'forms' property are not a valid for the '${model}' model. Received: { zone: ${zone}, tab: ${tab} }.`,\n        { file }\n      )\n      return\n    }\n\n    const fieldsObject = element.properties.find(\n      (p) => isObjectProperty(p) && isIdentifier(p.key, { name: \"fields\" })\n    ) as ObjectProperty | undefined\n\n    if (!fieldsObject) {\n      logger.warn(\n        `The 'fields' property is missing at the ${j} index of the 'forms' property. The 'fields' property is required to load a custom field form.`,\n        { file }\n      )\n      return\n    }\n","sourceCodeStart":324,"sourceCodeEnd":360,"githubUrl":"https://github.com/medusajs/medusa/blob/5e06e544a296b9033f20f71f11c559f81a0e5739/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts#L324-L360","documentation":"After resolving zone and tab, the plugin computes the full injection path (getFormEntryFieldPath(model, zone, tab)) and validates both the zone and the resulting path. If either is not recognized for the model, the combination is rejected with this warning and the form entry is skipped.","triggerScenarios":"A valid-looking string zone that is not a supported zone for that model (e.g. zone: 'attributes' on a model without an attributes zone), or a zone+tab combination whose form path does not exist.","commonSituations":"Reusing one form config across multiple models where supported zones differ, or after a Medusa upgrade that changed zone names.","solutions":["Verify the model's supported zones and tabs and use a valid combination (commonly zone: 'general' with tab: 'general')","Update the config to match the zones available in your Medusa version's admin UI","Check the generated path expectation against @medusajs/admin-shared custom-field form zone helpers"],"exampleFix":"// before\nforms: [{ zone: 'seo', tab: 'general', fields: {...} }]\n// after\nforms: [{ zone: 'general', tab: 'general', fields: {...} }]","handlingStrategy":"validation","validationCode":"import { isValidCustomFieldFormZone } from '@medusajs/admin-shared'\nconst fullPath = `${model}.${zone}.${tab}`\nif (!isValidCustomFieldFormZone(zone)) throw new Error(`invalid zone/tab combo: ${fullPath}`)","typeGuard":"const isSupportedZone = (z: string) => isValidCustomFieldFormZone(z)","tryCatchPattern":null,"preventionTips":["Stick to well-known combos like zone 'general' + tab 'general' initially","Validate zone/tab against @medusajs/admin-shared helpers in a test"],"tags":["admin","custom-fields","zone-validation","config-validation"],"backgroundTag":"admin-custom-field-form-validation","analyzedSha":"5e06e544a296b9033f20f71f11c559f81a0e5739","analyzedAt":"2026-08-27T07:24:39.599Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}