mirror of
https://github.com/norandom/OpenUltraSAST.git
synced 2026-10-16 11:49:28 +00:00
Legacy inventory 2, item R1. The vector half of index.py (VectorIndex, VectorRecord, RetrievalHit, RetrievalPackage, the EmbeddingClient protocol, index_reuse_key, build/write/read/query_vector_index, build_retrieval_package and their helpers) had no importer in src; `ousast index` wrote index/chunks.json that nothing read, and was the only reader of `[embeddings]`. index.py keeps CodeChunk and chunk_text_namespace, which skills.py imports; chunk_file/build_code_chunks go with their only caller. `[embeddings] model` and `[embeddings] store` join RETIRED_KEYS (RetiredConfigError naming the reason), the same way the [variants] keys were retired; OPENROUTER_EMBEDDING_MODEL is no longer read, so the README and .env.example drop it (`ousast learn memory embed --model` names the model). test_index.py now tests the chunker only; test_config.py covers the two retired keys and no longer asserts the removed field. The module audit record is regenerated (counts unchanged: 151 modules, 0 orphaned; the index module's importer list shrinks to skills). RELEASE_NOTES Unreleased carries the line. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01EmM1j46qgKMh3zqD1QMwEo
34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
import pytest
|
|
|
|
from openultrasast.index import chunk_text_namespace
|
|
|
|
|
|
def test_namespace_chunks_are_metadata_scoped() -> None:
|
|
chunks = chunk_text_namespace(
|
|
namespace="skills",
|
|
path="semgrep.md",
|
|
text="Use Semgrep for variant mapping.\nKeep provenance.",
|
|
metadata={"language": "markdown", "vulnerability_class": "mapping"},
|
|
max_lines=1,
|
|
)
|
|
|
|
assert len(chunks) == 2
|
|
assert chunks[0].namespace == "skills"
|
|
assert chunks[0].language == "markdown"
|
|
assert chunks[0].metadata["vulnerability_class"] == "mapping"
|
|
assert (chunks[0].start_line, chunks[0].end_line) == (1, 1)
|
|
assert chunks[0].chunk_id != chunks[1].chunk_id
|
|
|
|
|
|
def test_blank_blocks_are_skipped_and_the_language_defaults_to_text() -> None:
|
|
chunks = chunk_text_namespace(namespace="docs", path="README.md", text="alpha\n\n\nbeta\n", max_lines=1)
|
|
|
|
assert [chunk.text for chunk in chunks] == ["alpha", "beta"]
|
|
assert chunks[0].language == "text"
|
|
|
|
|
|
@pytest.mark.parametrize(("namespace", "max_lines"), [("unknown", 80), ("docs", 0)])
|
|
def test_invalid_namespace_or_window_is_rejected(namespace: str, max_lines: int) -> None:
|
|
with pytest.raises(ValueError):
|
|
chunk_text_namespace(namespace=namespace, path="x", text="y", max_lines=max_lines)
|