After the KB client fix (#10737), company creation now reaches ChromaDB but 500s:
chromadb.errors.InvalidArgumentError: Validation error: name: Expected a name containing 3-512 characters from [a-zA-Z0-9._-]... Got: company:<uuid>
The LLC KB layer names collections company:<uuid>, company:<uuid>:agents, agent:<id>, etc. (collections.py, capability_indexer.py, ac_suggester.py, artifact_ingestor.py, work_item_kb.py, work_product_service.py). ChromaDB 1.x forbids the colon. The colon is also a logical separator parsed via .split(":") (companies.py, inheritance.py) and used for Redis channels (publisher.py) — so changing the convention at the source touches ~8 files + fragile parsers.
Fix: sanitize names to ChromaDBs charset ([a-zA-Z0-9._-], colon→underscore) at the async ChromaDB adapter boundary (knowledge/backends/async_chromadb_adapter.py). Applied on create+read consistently; no-op for colon-free KB names; LLC logical names/parsers untouched.
Follow-up: consider consolidating the duplicated inline collection-name builders through KbCollectionManager.collection_name().
After the KB client fix (#10737), company creation now reaches ChromaDB but 500s:
chromadb.errors.InvalidArgumentError: Validation error: name: Expected a name containing 3-512 characters from [a-zA-Z0-9._-]... Got: company:<uuid>The LLC KB layer names collections
company:<uuid>,company:<uuid>:agents,agent:<id>, etc. (collections.py, capability_indexer.py, ac_suggester.py, artifact_ingestor.py, work_item_kb.py, work_product_service.py). ChromaDB 1.x forbids the colon. The colon is also a logical separator parsed via.split(":")(companies.py, inheritance.py) and used for Redis channels (publisher.py) — so changing the convention at the source touches ~8 files + fragile parsers.Fix: sanitize names to ChromaDBs charset ([a-zA-Z0-9._-], colon→underscore) at the async ChromaDB adapter boundary (knowledge/backends/async_chromadb_adapter.py). Applied on create+read consistently; no-op for colon-free KB names; LLC logical names/parsers untouched.
Follow-up: consider consolidating the duplicated inline collection-name builders through KbCollectionManager.collection_name().