{"record":{"id":"9312203825669774","repo":"medusajs/medusa","slug":"tab-property-at-the-j-index-of-the-forms-pr-931220","errorCode":null,"errorMessage":"'tab' property at the ${j} index of the 'forms' property is not a valid custom field form tab for the '${model}' model. Received: ${tab}.","messagePattern":"'tab' property at the (.+?) index of the 'forms' property is not a valid custom field form tab 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":328,"sourceCode":"      (p) => isObjectProperty(p) && isIdentifier(p.key, { name: \"tab\" })\n    ) as ObjectProperty | undefined\n\n    let tab: string | undefined\n\n    if (tabProperty) {\n      if (!isStringLiteral(tabProperty.value)) {\n        logger.warn(\n          `'tab' property at the ${j} index of the 'forms' property is not a string literal. The 'tab' property must be a string literal, e.g. 'general' or 'attributes'.`,\n          { file }\n        )\n        return\n      }\n\n      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","sourceCodeStart":310,"sourceCodeEnd":346,"githubUrl":"https://github.com/medusajs/medusa/blob/5e06e544a296b9033f20f71f11c559f81a0e5739/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts#L310-L346","documentation":"A 'tab' value was supplied as a string literal, but the string does not match any tab supported by the given model's form. The plugin validates the tab via isValidCustomFieldFormTab(tab) and rejects unknown values, since there is no UI tab to render the form in.","triggerScenarios":"tab: 'pricing' for a model whose form only exposes 'general'/'attributes', or a typo like tab: 'genral'.","commonSituations":"Assuming tabs from one model (e.g. product) apply to another (e.g. customer), version upgrades that renamed tabs, or simple typos.","solutions":["Check the model's supported form tabs in the Medusa admin docs and use one of those exact strings","Fix typos in the tab value","If the intended tab does not exist for the model, drop 'tab' and rely on the zone default"],"exampleFix":"// before\nforms: [{ zone: 'general', tab: 'pricing', fields: {...} }]\n// after\nforms: [{ zone: 'general', tab: 'general', fields: {...} }]","handlingStrategy":"validation","validationCode":"const VALID_TABS = ['general', 'attributes']\nif (f.tab && !VALID_TABS.includes(f.tab)) {\n  throw new Error(`unsupported tab '${f.tab}' for model ${model}`)\n}","typeGuard":"const isValidTab = (t: string) => ['general', 'attributes'].includes(t)","tryCatchPattern":null,"preventionTips":["Check the model's supported tabs in @medusajs/admin-shared before adding tab","Pin the Medusa version and re-verify tabs on upgrade"],"tags":["admin","custom-fields","tab-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"}