Skip to content

OpenEmpiric v1.0.5

Latest

Choose a tag to compare

@xpajonx xpajonx released this 02 Jul 09:26

Release Overview

OpenEmpiric v1.0.5 hardens source indexing and source search ranking. The release focuses on deterministic source retrieval: implementation files rank ahead of broad docs/tests when they carry exact source evidence, metadata-only rows cannot dominate normal source results, and source-index include/exclude configuration now behaves predictably.

What Changed and Why

1. Source Search Ranking Hardening

  • Change: Added deterministic source-ranking diagnostics, exact identifier matching, symbol-definition boosts, implementation/test/doc/config classification, metadata-only suppression, and stable tie-breakers.
  • Why: Source search now gives more predictable implementation-first results for technical queries while still allowing doc/config/agent-instruction queries to return the right non-code files.

2. Source Index Coverage For Implementation Directories

  • Change: Upgraded old default source-index config patterns so execution/** and agent/** can be indexed by default when present.
  • Why: Implementation scripts and agent helpers are part of the source corpus and should be searchable without manual config changes.

3. Metadata-Only Guardrails

  • Change: Metadata-only files no longer receive implementation boosts unless rescued by exact path or filename evidence, and cannot outrank real source content with exact identifiers.
  • Why: Large/generated/metadata-only rows can remain visible for exact lookup without polluting normal source-query results.

4. Config Exclusion Fixes

  • Change: Added exclude_globs to SourceIndexConfig, wired it through config loading, and made classification use exclude_globs separately from explicit exclude rules.
  • Why: .gitignore/.oemignore-style ignores and explicit include/exclude matching now stay separate and both work as intended.

5. Ranking Cleanup

  • Change: Matched identifiers are computed once per result and reused across classification, boosts, diagnostics, and multi-match scoring. Misleading "cooccurrence" naming was replaced with identifier_multi_match / matched identifiers. Ranking weights and BM25 constants are now named.
  • Why: The ranking code is easier to audit and tune without hidden duplicate matching work or unexplained numeric thresholds.

Install

To install/update this version using uv:

uv tool install "git+https://github.com/xpajonx/openempiric.git#subdirectory=packages/oem-knowledge[semantic]"

Validation

Targeted source-search ranking tests passed:

PYTHONPATH=packages/oem-knowledge/src uv run pytest \
  packages/oem-knowledge/tests/test_source_search_ranking.py \
  -q --tb=short

Result: 92 passed.

Broader source/memory/preflight regression tests passed:

PYTHONPATH=packages/oem-knowledge/src uv run pytest \
  packages/oem-knowledge/tests/test_search_ranking.py \
  packages/oem-knowledge/tests/test_memory_ranking_harness.py \
  packages/oem-knowledge/tests/test_preflight.py \
  packages/oem-knowledge/tests/test_active_work.py \
  packages/oem-knowledge/tests/test_knowledge_health.py \
  -q --tb=short

Result: 266 passed, 32 warnings.

Source indexing completed successfully for this repository:

Scanned Files: 199
Indexed Files: 199
Metadata-only: 0
Total Chunks: 599

The corrected source-index database path is:

.oem/indexes/source_index.sqlite