{"record":{"id":"d15cb65f194ca6b8","repo":"temporalio/temporal","slug":"component-s-has-field-visibility-but-no-busines","errorCode":null,"errorMessage":"component %s has Field[*Visibility] but no businessID alias; use WithBusinessIDAlias option","messagePattern":"component (.+?) has Field\\[\\*Visibility\\] but no businessID alias; use WithBusinessIDAlias option","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"chasm/registry.go","lineNumber":350,"sourceCode":"}\n\nfunc (r *Registry) validateName(n string) error {\n\tif n == \"\" {\n\t\treturn errors.New(\"name must not be empty\")\n\t}\n\tif !nameValidator.MatchString(n) {\n\t\treturn fmt.Errorf(\"name %s is invalid. name must follow golang identifier rules: %s\", n, nameValidator.String())\n\t}\n\treturn nil\n}\n\nfunc (r *Registry) validateVisibilityBusinessIDAlias(rc *RegistrableComponent) error {\n\tif !hasVisibilityField(rc.goType) {\n\t\treturn nil\n\t}\n\t// Archetypes that contain a Field[*Visibility] must specify WithBusinessIDAlias.\n\tif !rc.hasBusinessIDAlias() {\n\t\treturn fmt.Errorf(\"component %s has Field[*Visibility] but no businessID alias; use WithBusinessIDAlias option\", rc.componentType)\n\t}\n\treturn nil\n}\n\nfunc (r *Registry) warnUnmanagedFields(fqn string, rc *RegistrableComponent) {\n\tvar unmanagedFields []string\n\tfor f := range unmanagedFieldsOf(rc.goType) {\n\t\tunmanagedFields = append(unmanagedFields, fmt.Sprintf(\"%s %s\", f.name, f.typ))\n\t}\n\tif len(unmanagedFields) > 0 {\n\t\tr.logger.Info(fmt.Sprintf(\n\t\t\t\"Warning: CHASM component %s declares state fields that won't be managed by CHASM:\\n\\t%s\",\n\t\t\tfqn,\n\t\t\tstrings.Join(unmanagedFields, \"\\n\\t\")))\n\t}\n}\n\nfunc (r *Registry) registerNexusService(svc *nexus.Service) error {","sourceCodeStart":332,"sourceCodeEnd":368,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/chasm/registry.go#L332-L368","documentation":"validateVisibilityBusinessIDAlias enforces that any component whose struct contains a chasm Field[*Visibility] must declare a business ID alias via the WithBusinessIDAlias registration option. The Visibility field is used for search/visibility indexing, and without a business ID alias the framework cannot map visibility records back to business identifiers.","triggerScenarios":"Registering a component struct that has a `Field[*Visibility]` member but calling chasm.Register without the WithBusinessIDAlias option.","commonSituations":"Adding a Visibility field to a component for searchability and forgetting the new required option; copying a component definition that includes Visibility into a new component registered elsewhere; upgrading chasm where the alias requirement was introduced.","solutions":["Add the WithBusinessIDAlias(\"<field-or-id>\") option to the component's registration.","Pick the alias matching the business identifier the component should be searchable by.","Remove the Field[*Visibility] member if visibility/search is not needed for this component."],"exampleFix":"// before\nchasm.Register[OrderImpl](reg, chasm.WithComponentName(\"order\"))\n// after\nchasm.Register[OrderImpl](reg, chasm.WithComponentName(\"order\"), chasm.WithBusinessIDAlias(\"OrderID\"))","handlingStrategy":"validation","validationCode":"if hasVisibilityField(reflect.TypeOf(MyComponentImpl{})) && !hasBusinessIDAliasOption {\n\treturn errors.New(\"component has Field[*Visibility]; add chasm.WithBusinessIDAlias\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Whenever you add Field[*Visibility] to a component, add WithBusinessIDAlias in the same change.","Grep components for `Visibility` in code review and verify the registration options.","Cover component registration in a unit test that runs the registry validation."],"tags":["chasm","registry","visibility","missing-option"],"backgroundTag":"missing-business-id-alias","analyzedSha":"bde624efd13fbd3843654058db6d9c716166318b","analyzedAt":"2026-09-01T07:18:39.080Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}