{"record":{"id":"1a6a9a5901a483c0","repo":"weaviate/weaviate","slug":"property-name-s-w","errorCode":null,"errorMessage":"property name %s: %w","messagePattern":"property name (.+?): %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"usecases/schema/property.go","lineNumber":180,"sourceCode":"\t// take the address of the local copy. *models.Property has nested\n\t// pointer fields (IndexFilterable, IndexSearchable, etc.) — those\n\t// inner pointers are SHARED with the FSM, but the index-flag\n\t// mutations below replace the pointer outright\n\t// (`prop.IndexFilterable = &notExists`) instead of writing\n\t// through the existing one, so the FSM's pointer values stay\n\t// untouched. Same pattern applyPerPropertySchemaUpdate\n\t// (adapters/repos/db/inverted_reindex_strategy.go) uses for the\n\t// reindex strategies' schema flips.\n\tvar prop *models.Property\n\tfor i := range class.Properties {\n\t\tif class.Properties[i].Name == propertyName {\n\t\t\tpropCopy := *class.Properties[i]\n\t\t\tprop = &propCopy\n\t\t\tbreak\n\t\t}\n\t}\n\tif prop == nil {\n\t\treturn fmt.Errorf(\"property name %s: %w\", propertyName, ErrNotFound)\n\t}\n\n\t// We track the *single* field being mutated so we can pass a\n\t// field mask to UpdateProperty below. Without the mask, the RAFT\n\t// FSM falls back to \"replace every field\" semantics\n\t// (MergePropsMasked with no mask), which means a read-modify-write\n\t// off a follower whose local FSM lags one RAFT entry behind the\n\t// leader will clobber the leader's value of OTHER index flags on\n\t// commit.\n\t//\n\t// Concrete failure shape (reproduces in\n\t// test/acceptance/alter_schema/delete_property_index_empty_test.go\n\t// on a 3-node cluster):\n\t//\n\t//   t=0  delete title.filterable on node A\n\t//        → RAFT replicates, all FSMs converge IndexFilterable=false\n\t//   t=1  delete title.searchable hits node B before B applies t=0\n\t//        → propCopy reads IndexFilterable=true off B's stale FSM","sourceCodeStart":162,"sourceCodeEnd":198,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/usecases/schema/property.go#L162-L198","documentation":"Wrapped not-found error in DeleteClassPropertyIndex: the given property name does not match any property of the class (name lookup over class.Properties fails, case-insensitively after normalization). Wraps the underlying cause so callers can match on ErrNotFound.","triggerScenarios":"Thrown at usecases/schema/property.go:180 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the property exists on the collection via the schema endpoint","Remember property names are lowercased on creation; use the stored (lowercase) name","Check for typos or wrong collection"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}