Feature: Vector Store Service extended coverage (round 3) Exercise ACMS vector store paths, protocol stubs, and internal helpers that are not yet covered by the existing feature file. # ------------------------------------------------------------------ # Protocol body coverage # ------------------------------------------------------------------ Scenario: Plan store protocol similarity_search_with_score raises NotImplementedError Given vscov3 a plan store protocol instance When vscov3 I call similarity_search_with_score on the plan protocol Then vscov3 the plan protocol should raise NotImplementedError Scenario: Plan store protocol save_local raises NotImplementedError Given vscov3 a plan store protocol instance When vscov3 I call save_local on the plan protocol Then vscov3 the plan protocol should raise NotImplementedError Scenario: Docstore protocol search raises NotImplementedError Given vscov3 a docstore protocol instance When vscov3 I call search on the docstore protocol Then vscov3 the docstore protocol should raise NotImplementedError Scenario: ACMS store protocol add_embeddings raises NotImplementedError Given vscov3 an ACMS store protocol instance When vscov3 I call add_embeddings on the ACMS protocol Then vscov3 the ACMS protocol should raise NotImplementedError Scenario: ACMS store protocol similarity_search_with_score_by_vector raises NotImplementedError Given vscov3 an ACMS store protocol instance When vscov3 I call similarity_search_with_score_by_vector on the ACMS protocol Then vscov3 the ACMS protocol should raise NotImplementedError Scenario: ACMS store protocol delete raises NotImplementedError Given vscov3 an ACMS store protocol instance When vscov3 I call delete on the ACMS protocol Then vscov3 the ACMS protocol should raise NotImplementedError Scenario: ACMS store protocol save_local raises NotImplementedError Given vscov3 an ACMS store protocol instance When vscov3 I call save_local on the ACMS protocol Then vscov3 the ACMS protocol should raise NotImplementedError # ------------------------------------------------------------------ # _require_faiss when FAISS is None # ------------------------------------------------------------------ Scenario: Require FAISS raises ConfigurationError when FAISS is not installed Given vscov3 a vector store service with ACMS enabled And vscov3 FAISS is patched to None When vscov3 I call _require_faiss Then vscov3 a ConfigurationError mentioning FAISS should be stored # ------------------------------------------------------------------ # acms_count # ------------------------------------------------------------------ Scenario: ACMS count returns total count when project is None Given vscov3 a vector store service with ACMS enabled And vscov3 the ACMS store has indexed documents for projects "alpha" and "beta" When vscov3 I call acms_count without a project filter Then vscov3 the ACMS count should be 2 Scenario: ACMS count returns filtered count for a specific project Given vscov3 a vector store service with ACMS enabled And vscov3 the ACMS store has indexed documents for projects "alpha" and "beta" When vscov3 I call acms_count for project "alpha" Then vscov3 the ACMS count should be 1 Scenario: ACMS count returns 0 when store is empty Given vscov3 a vector store service with ACMS enabled When vscov3 I call acms_count without a project filter Then vscov3 the ACMS count should be 0 # ------------------------------------------------------------------ # acms_index_embedding validations # ------------------------------------------------------------------ Scenario: ACMS index rejects empty project Given vscov3 a vector store service with ACMS enabled When vscov3 I index an ACMS embedding with an empty project Then vscov3 a ValueError mentioning "project" should be stored Scenario: ACMS index rejects empty doc_id Given vscov3 a vector store service with ACMS enabled When vscov3 I index an ACMS embedding with an empty doc_id Then vscov3 a ValueError mentioning "doc_id" should be stored Scenario: ACMS index rejects empty embedding list Given vscov3 a vector store service with ACMS enabled When vscov3 I index an ACMS embedding with an empty embedding list Then vscov3 a ValueError mentioning "embedding" should be stored Scenario: ACMS index rejects when ACMS is disabled Given vscov3 a vector store service with ACMS disabled When vscov3 I index an ACMS embedding with valid inputs Then vscov3 a ConfigurationError mentioning "disabled" should be stored Scenario: ACMS index uses fallback payload when content is empty Given vscov3 a vector store service with ACMS enabled And vscov3 FAISS is mocked for ACMS operations When vscov3 I index an embedding with project "p1" doc_id "d1" embedding [0.1] and no content Then vscov3 the indexed payload should be "embedding:d1" Scenario: ACMS index adds to existing store and replaces duplicate Given vscov3 a vector store service with ACMS enabled And vscov3 FAISS is mocked for ACMS operations And vscov3 the ACMS store already has a document "p1::d1" When vscov3 I index an embedding with project "p1" doc_id "d1" embedding [0.5] and content "updated" Then vscov3 the existing store_id should have been deleted before re-add And vscov3 the store should have received add_embeddings # ------------------------------------------------------------------ # acms_search_by_vector # ------------------------------------------------------------------ Scenario: ACMS search rejects empty embedding Given vscov3 a vector store service with ACMS enabled When vscov3 I search ACMS with empty embedding Then vscov3 a ValueError mentioning "embedding" should be stored Scenario: ACMS search rejects non-positive top_k Given vscov3 a vector store service with ACMS enabled When vscov3 I search ACMS with top_k 0 Then vscov3 a ValueError mentioning "top_k" should be stored Scenario: ACMS search returns empty when ACMS is disabled Given vscov3 a vector store service with ACMS disabled When vscov3 I search ACMS with embedding [0.1] and top_k 5 Then vscov3 the ACMS search results should be empty Scenario: ACMS search returns empty when store is None Given vscov3 a vector store service with ACMS enabled When vscov3 I search ACMS with embedding [0.1] and top_k 5 Then vscov3 the ACMS search results should be empty Scenario: ACMS search filters by scope Given vscov3 a vector store service with ACMS enabled And vscov3 FAISS is mocked for ACMS operations And vscov3 the ACMS store has search results with resource_ids "r1" and "r2" When vscov3 I search ACMS with embedding [0.1] scope "r1" and top_k 5 Then vscov3 the ACMS search results should have entries # ------------------------------------------------------------------ # acms_remove_embedding # ------------------------------------------------------------------ Scenario: ACMS remove rejects empty project Given vscov3 a vector store service with ACMS enabled When vscov3 I remove an ACMS embedding with an empty project Then vscov3 a ValueError mentioning "project" should be stored Scenario: ACMS remove rejects empty doc_id Given vscov3 a vector store service with ACMS enabled When vscov3 I remove an ACMS embedding with an empty doc_id Then vscov3 a ValueError mentioning "doc_id" should be stored Scenario: ACMS remove is a no-op when store is None Given vscov3 a vector store service with ACMS enabled When vscov3 I remove ACMS embedding for project "p1" and doc_id "d1" Then vscov3 no error should be stored Scenario: ACMS remove keeps store when documents remain Given vscov3 a vector store service with ACMS enabled And vscov3 FAISS is mocked for ACMS operations And vscov3 the ACMS store has documents "p1::d1" and "p1::d2" When vscov3 I remove ACMS embedding for project "p1" and doc_id "d1" Then vscov3 the ACMS store should still be set And vscov3 save should have been called # ------------------------------------------------------------------ # _create_acms_embeddings # ------------------------------------------------------------------ Scenario: ACMS embeddings uses default dimension when dims_value is None Given vscov3 a vector store service with ACMS enabled And vscov3 the ACMS embedding config uses provider "fake" with no model and no dimensions When vscov3 I call _create_acms_embeddings Then vscov3 the embeddings should be FakeEmbeddings with default dimension Scenario: ACMS embeddings with openai provider Given vscov3 a vector store service with ACMS enabled And vscov3 the ACMS embedding config uses provider "openai" model "text-embedding-3-small" and dimensions 512 And vscov3 a stub OpenAI embeddings module is available When vscov3 I call _create_acms_embeddings Then vscov3 the embeddings should be StubOpenAIEmbeddings with model "text-embedding-3-small" Scenario: ACMS embeddings with openai provider and no dimensions Given vscov3 a vector store service with ACMS enabled And vscov3 the ACMS embedding config uses provider "openai" model "text-embedding-3-small" with no dimensions And vscov3 a stub OpenAI embeddings module is available When vscov3 I call _create_acms_embeddings Then vscov3 the embeddings should be StubOpenAIEmbeddings with model "text-embedding-3-small" Scenario: ACMS embeddings with unsupported provider raises error Given vscov3 a vector store service with ACMS enabled And vscov3 the ACMS embedding config uses provider "unsupported_provider" with no model and no dimensions When vscov3 I call _create_acms_embeddings Then vscov3 a ConfigurationError mentioning "Unsupported" should be stored # ------------------------------------------------------------------ # _load_acms_store # ------------------------------------------------------------------ Scenario: Load ACMS store returns None when files are missing Given vscov3 a vector store service with ACMS enabled When vscov3 I call _load_acms_store Then vscov3 the loaded store should be None Scenario: Load ACMS store succeeds when files exist Given vscov3 a vector store service with ACMS enabled And vscov3 FAISS is mocked for ACMS operations And vscov3 the ACMS store directory has index files When vscov3 I call _load_acms_store Then vscov3 the loaded store should not be None Scenario: Load ACMS store returns None when load raises ValueError Given vscov3 a vector store service with ACMS enabled And vscov3 FAISS is mocked for ACMS operations And vscov3 the ACMS store directory has index files And vscov3 FAISS load_local will raise ValueError When vscov3 I call _load_acms_store Then vscov3 the loaded store should be None # ------------------------------------------------------------------ # _acms_store_dir with relative path # ------------------------------------------------------------------ Scenario: ACMS store dir resolves relative paths via cwd Given vscov3 a vector store service with ACMS dir set to a relative path When vscov3 I call _acms_store_dir Then vscov3 the returned path should be absolute # ------------------------------------------------------------------ # _save_acms_store early return # ------------------------------------------------------------------ Scenario: Save ACMS store is a no-op when internal store is None Given vscov3 a vector store service with ACMS enabled When vscov3 I call _save_acms_store Then vscov3 no error should be stored # ------------------------------------------------------------------ # _iter_store_metadata # ------------------------------------------------------------------ Scenario: Iterating store metadata yields id and metadata pairs Given vscov3 a vector store service with ACMS enabled And vscov3 a mock ACMS store with docstore entries When vscov3 I call _iter_store_metadata Then vscov3 the iteration should yield 2 entries with string keys and values