Use names that accurately reflect meaning, scope (internal vs external), and responsibility—and keep them consistent with existing/base APIs.

Apply these rules: 1) Internal fields vs user-visible concepts: If a property is implicit/internal, name it consistently with an underscore prefix and ensure all relevant types expose it.

2) Match the data type/role to the identifier: Don’t call vectors “keywords” or “text” if the value is embeddings.

3) Responsibility-revealing function names: The function name must describe what it actually does.

4) Avoid duplicate/conflicting base names: Don’t introduce new variants of fields already defined by base classes.

5) Avoid ambiguous configuration parameter names: Prefer names that won’t be mistaken for other common concepts.

6) Use pythonic module/file naming: Ensure filenames follow standard Python conventions (lowercase with underscores, no camel-case file names).

If you’re unsure, ask: “Can another developer infer the value’s meaning and the function’s side effects from the name alone?” If not, rename it.