bgts-context-engine 0.2.4__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/CHANGELOG.md +96 -1
  2. {bgts_context_engine-0.2.4/src/bgts_context_engine.egg-info → bgts_context_engine-0.3.0}/PKG-INFO +2 -2
  3. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/README.md +1 -1
  4. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/README.tr.md +1 -1
  5. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/__init__.py +1 -1
  6. bgts_context_engine-0.3.0/src/bce/core/orchestrator/anchors.py +700 -0
  7. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/orchestrator/expand.py +27 -2
  8. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/orchestrator/orchestrator.py +24 -4
  9. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/orchestrator/text.py +168 -1
  10. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/domain/models.py +5 -0
  11. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/embedder/embedder.py +92 -10
  12. bgts_context_engine-0.3.0/src/bce/indexing/parser/_treesitter.py +122 -0
  13. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/languages/csharp_provider.py +24 -18
  14. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/languages/go_provider.py +25 -19
  15. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/languages/java_provider.py +24 -18
  16. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/languages/jsts_provider.py +102 -27
  17. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/languages/python_provider.py +25 -18
  18. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/graph/repository.py +218 -23
  19. bgts_context_engine-0.3.0/src/bce/storage/relational/migrations/0011_search_text.sql +80 -0
  20. bgts_context_engine-0.3.0/src/bce/storage/relational/migrations/0012_body_trgm.sql +28 -0
  21. bgts_context_engine-0.3.0/src/bce/storage/vector/store.py +195 -0
  22. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/tools/layer3/orchestration.py +90 -16
  23. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0/src/bgts_context_engine.egg-info}/PKG-INFO +2 -2
  24. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bgts_context_engine.egg-info/SOURCES.txt +2 -0
  25. bgts_context_engine-0.2.4/src/bce/core/orchestrator/anchors.py +0 -346
  26. bgts_context_engine-0.2.4/src/bce/indexing/parser/_treesitter.py +0 -58
  27. bgts_context_engine-0.2.4/src/bce/storage/vector/store.py +0 -110
  28. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/LICENSE +0 -0
  29. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/MANIFEST.in +0 -0
  30. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/pyproject.toml +0 -0
  31. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/setup.cfg +0 -0
  32. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/__init__.py +0 -0
  33. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/mcp/__init__.py +0 -0
  34. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/mcp/server.py +0 -0
  35. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/mcp/tools.py +0 -0
  36. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/__init__.py +0 -0
  37. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/app.py +0 -0
  38. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/deps.py +0 -0
  39. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/routes.py +0 -0
  40. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/schemas.py +0 -0
  41. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/static/assets/index-Cc4pUpSE.js +0 -0
  42. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/static/assets/index-DrLRaTMU.css +0 -0
  43. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/static/favicon.svg +0 -0
  44. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/static/index.html +0 -0
  45. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/ui/__init__.py +0 -0
  46. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/ui/queries.py +0 -0
  47. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/ui/router.py +0 -0
  48. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/ui/schemas.py +0 -0
  49. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/api/rest/ui/trace.py +0 -0
  50. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/bench/__init__.py +0 -0
  51. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/bench/pr_ablation.py +0 -0
  52. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/bench/runner.py +0 -0
  53. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/cli.py +0 -0
  54. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/config.py +0 -0
  55. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/__init__.py +0 -0
  56. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/assembler/__init__.py +0 -0
  57. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/assembler/assembler.py +0 -0
  58. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/auth/__init__.py +0 -0
  59. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/auth/scope.py +0 -0
  60. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/coverage/__init__.py +0 -0
  61. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/coverage/confidence.py +0 -0
  62. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/defaults.py +0 -0
  63. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/i18n/__init__.py +0 -0
  64. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/i18n/catalogs/en.json +0 -0
  65. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/i18n/catalogs/tr.json +0 -0
  66. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/i18n/locale.py +0 -0
  67. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/i18n/translator.py +0 -0
  68. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/logging.py +0 -0
  69. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/orchestrator/__init__.py +0 -0
  70. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/orchestrator/bulk.py +0 -0
  71. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/orchestrator/profile.py +0 -0
  72. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/scoring/__init__.py +0 -0
  73. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/core/scoring/engine.py +0 -0
  74. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/domain/__init__.py +0 -0
  75. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/domain/enums.py +0 -0
  76. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/__init__.py +0 -0
  77. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/churn.py +0 -0
  78. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/embedder/__init__.py +0 -0
  79. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/embedder/encoder.py +0 -0
  80. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/extractor/__init__.py +0 -0
  81. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/extractor/bridges.py +0 -0
  82. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/extractor/designnote.py +0 -0
  83. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/extractor/extractor.py +0 -0
  84. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/extractor/routes.py +0 -0
  85. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/gitsync/__init__.py +0 -0
  86. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/gitsync/bitbucket.py +0 -0
  87. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/gitsync/local.py +0 -0
  88. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/gitsync/remote.py +0 -0
  89. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/indexer.py +0 -0
  90. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/linker/__init__.py +0 -0
  91. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/linker/linker.py +0 -0
  92. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/__init__.py +0 -0
  93. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/base.py +0 -0
  94. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/languages/__init__.py +0 -0
  95. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/registry.py +0 -0
  96. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/scip/__init__.py +0 -0
  97. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/scip/resolver.py +0 -0
  98. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/parser/symbol_id.py +0 -0
  99. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/upserter/__init__.py +0 -0
  100. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/indexing/upserter/upserter.py +0 -0
  101. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/integrations/__init__.py +0 -0
  102. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/integrations/agents.py +0 -0
  103. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/integrations/precontext.py +0 -0
  104. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/integrations/templates/claude_section.md +0 -0
  105. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/integrations/templates/cursor_rule.mdc +0 -0
  106. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/jobs/__init__.py +0 -0
  107. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/jobs/store.py +0 -0
  108. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/jobs/worker.py +0 -0
  109. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/__init__.py +0 -0
  110. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/graph/__init__.py +0 -0
  111. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/graph/client.py +0 -0
  112. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/__init__.py +0 -0
  113. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/db.py +0 -0
  114. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0001_extensions_graph.sql +0 -0
  115. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0002_relational.sql +0 -0
  116. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0003_vector.sql +0 -0
  117. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0004_rls.sql +0 -0
  118. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0005_embeddings_dim.sql +0 -0
  119. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0006_fts.sql +0 -0
  120. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0007_jobs.sql +0 -0
  121. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0008_graph_label_indexes.sql +0 -0
  122. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0009_fts_identifier_parts.sql +0 -0
  123. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrations/0010_file_churn.sql +0 -0
  124. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/migrator.py +0 -0
  125. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/relational/queries.py +0 -0
  126. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/storage/vector/__init__.py +0 -0
  127. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/tools/__init__.py +0 -0
  128. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/tools/layer1/__init__.py +0 -0
  129. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/tools/layer1/primitives.py +0 -0
  130. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/tools/layer2/__init__.py +0 -0
  131. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/tools/layer2/search.py +0 -0
  132. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bce/tools/layer3/__init__.py +0 -0
  133. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bgts_context_engine.egg-info/dependency_links.txt +0 -0
  134. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bgts_context_engine.egg-info/entry_points.txt +0 -0
  135. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bgts_context_engine.egg-info/requires.txt +0 -0
  136. {bgts_context_engine-0.2.4 → bgts_context_engine-0.3.0}/src/bgts_context_engine.egg-info/top_level.txt +0 -0
@@ -7,6 +7,99 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.0] - 2026-09-24
11
+
12
+ Retrieval hybrid-v4: the whole symbol is searchable, and the task's code fragments, file
13
+ paths and dominant names find the places that *use* them. Measured on 30 natural-language
14
+ tasks against a React/TypeScript front end (`local_bench/cli_k50_eval`, `bce context
15
+ --max-candidates 50`, macro file recall over the files each task had to touch): **82.0 →
16
+ 99.6 / 100**, full recall on 29/30 tasks against 20/30, micro recall 72 % → 98 %, no task
17
+ without a hit, MRR 0.67 → 0.76. Of the 31 files the old pipeline missed at K=50, 27 had never entered the
18
+ candidate pool: their evidence lived in parts of the code nothing indexed — a
19
+ `localStorage.getItem('token')` in the middle of a 10 KB panel, the members of a `type`
20
+ union, a toast string sixty lines into a page. Every change below is general (nothing is
21
+ fitted to those tasks) and the head of every channel is unchanged for small answers.
22
+
23
+ ### Added
24
+
25
+ - **Symbol search text.** Every language provider attaches the symbol's full declaration
26
+ (capped at 24 000 characters) as `GraphNode.search_text`; it is not a graph property. It
27
+ feeds the FTS document (`symbol_fts.body`, weight D as identifier words) and the
28
+ embeddings, so interfaces, constants, classes and long components — which had a 1 200
29
+ character head or nothing — are findable by what they contain.
30
+ - **Chunked embeddings.** A symbol longer than one window (2 000 characters, 200 overlap,
31
+ at most 12 windows) is stored as several vectors, each repeating the header (name, kind,
32
+ path, signature, docstring); search collapses them to the symbol's best chunk. Migration
33
+ `0011_search_text` adds `embeddings.chunk` and the `(kind, ref_id, chunk)` uniqueness.
34
+ - **TypeScript `type` aliases and `enum`s** are symbols (`type` / `enum`); JSDoc blocks
35
+ above a declaration (or its `export` / decorator) become the docstring.
36
+ - **Usage anchor source.** Code fragments the task wrote out — a backticked name as a whole
37
+ word, a quoted string as a literal, a dotted expression as a substring — are looked up
38
+ inside symbol bodies; strength falls with the match count and generic fragments
39
+ (`useState`) are dropped. Migration `0012_body_trgm` adds `pg_trgm` GIN indexes on
40
+ `symbol_fts.body` and `file_id` (2 ms a lookup; skipped with a notice where the extension
41
+ is unavailable).
42
+ - **Path anchor source.** File paths the task names — `src/utils/auth.ts`, a bare
43
+ `Layout.tsx`, the `File "/opt/app/flask/app.py"` of a traceback — resolve to indexed files
44
+ by longest suffix and nominate every symbol in them (`0.85 / files`; more than 4 files is
45
+ ambiguous and ignored).
46
+ - **Impact anchor source.** Callers and referrers of the five strongest anchors with
47
+ combined strength ≥ 0.9 get anchor evidence of their own, fan-out aware (`0.7 · root ·
48
+ √(1 − users/pool)`; hubs nominate nothing). "Every component that calls the admin check"
49
+ is answered by `isAdmin`'s callers, not by a decayed hop. The same source follows
50
+ **coupling through data**: the namespaced string literals of a dominant anchor's body —
51
+ query keys, storage keys, route paths, i18n / config keys — are looked up in other
52
+ bodies, and the symbols quoting them (the hook that registers the query a helper
53
+ invalidates) are its users too, with the same fan-out rule against a quarter of the pool.
54
+ Bare words (`'undefined'`, `'dark'`) are not keys; a literal quoted by a quarter of the
55
+ pool (`'en-US'`) is a convention and nominates nothing.
56
+ - **Lexical phrase bonus.** Adjacent content-word pairs of the task (`access token`) are
57
+ looked up conjunctively and reward symbols carrying both words.
58
+ - **Outbound `REFERENCES` expansion** (one hop): the constants, types and fields an
59
+ anchor's body reads, writes or passes.
60
+ - `VectorStore.trim_chunks`, `GraphRepository.body_mentions`, `symbol_bodies`,
61
+ `files_by_suffix`, `references_of` / `get_references`; lexical hits carry a `match_tier`
62
+ (`a` name, `b` name parts, `c` container / path, `d` signature / docstring / body).
63
+
64
+ ### Changed
65
+
66
+ - **Channel widths follow the answer size.** Lexical pool / anchors, semantic candidates
67
+ and the usage pool are `max(default, 2K)` (`max(15, K)` lexical anchors) for
68
+ `max_candidates = K`; a 50-symbol answer no longer draws on a 30-candidate channel.
69
+ - **Per-file cap tapers past slot 10.** The engine's diversity rule keeps `ceil(i · 0.6)`
70
+ symbols per file for the first ten slots and admits one more per ten slots after that: 10
71
+ of 50 and 15 of 100 instead of 30 and 60. Model-stream picks stay exempt; the list stays
72
+ K-monotonic. Long answers cover more places instead of the fourteenth helper of one file.
73
+ - **The FTS document** carries every word of the file path at weight C (not just the stem)
74
+ and the identifier words of the body at weight D; `ts_rank` uses length normalisation so
75
+ a 300-line component does not outrank a 3-line helper by word count. **Lexical strength
76
+ depends on where a term matched**: a hit in the exact name counts 1.0, in its identifier
77
+ parts 0.9, in container / path words 0.6, only in the signature, docstring or body 0.35 —
78
+ with whole bodies in the document, a long component matches half the words of any task
79
+ somewhere, and without the tiers it outranked the helpers named after those words.
80
+ - Splitting the task into clauses and fusing the per-clause semantic rankings was built,
81
+ measured and dropped: with chunked embeddings the whole-text query already found 89 of
82
+ 127 expected files in its top 100 against the fusion's 87, and the fusion cost the head
83
+ (semantic hit@1 19 → 14 of 30, MRR 0.75 → 0.58). One query vector per task, as before.
84
+ - **Test detection by name is narrower.** `test_x` / `should_x` are tests wherever they
85
+ live; the CamelCase `TestFoo` / `testFoo` forms are trusted only when no path is known.
86
+ `TestBotTriggerPanel` is a production component and was being dropped from every channel.
87
+
88
+ ### Migration
89
+
90
+ `bce migrate` applies `0011` and `0012`. Rows indexed before `0011` have no body and a single
91
+ vector, so **re-index once** (`bce index` per repository) for the usage source, body search
92
+ and chunked embeddings to see them; nothing is truncated and the old rows keep working
93
+ meanwhile.
94
+
95
+ ## [0.2.5] - 2026-09-24
96
+
97
+ ### Changed
98
+
99
+ - The English and Turkish READMEs link to the project website
100
+ ([bgts-ai-org.github.io/bce-microsite](https://bgts-ai-org.github.io/bce-microsite/))
101
+ from the top navigation.
102
+
10
103
  ## [0.2.4] - 2026-09-22
11
104
 
12
105
  This release turns the agent benchmark (a Cursor CLI agent on 14 tasks against a
@@ -370,7 +463,9 @@ First public release.
370
463
  - Docker Compose deployment with PostgreSQL, Apache AGE and pgvector preconfigured.
371
464
  - `server.json` manifest describing the stdio server for the official MCP registry.
372
465
 
373
- [Unreleased]: https://github.com/bgts-ai-org/bgts-context-engine/compare/v0.2.4...HEAD
466
+ [Unreleased]: https://github.com/bgts-ai-org/bgts-context-engine/compare/v0.3.0...HEAD
467
+ [0.3.0]: https://github.com/bgts-ai-org/bgts-context-engine/compare/v0.2.5...v0.3.0
468
+ [0.2.5]: https://github.com/bgts-ai-org/bgts-context-engine/compare/v0.2.4...v0.2.5
374
469
  [0.2.4]: https://github.com/bgts-ai-org/bgts-context-engine/compare/v0.2.3...v0.2.4
375
470
  [0.2.3]: https://github.com/bgts-ai-org/bgts-context-engine/compare/v0.2.2...v0.2.3
376
471
  [0.2.2]: https://github.com/bgts-ai-org/bgts-context-engine/compare/v0.2.1...v0.2.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bgts-context-engine
3
- Version: 0.2.4
3
+ Version: 0.3.0
4
4
  Summary: Deterministic code-graph context engine for AI coding agents - PostgreSQL, Apache AGE and pgvector, over MCP and REST
5
5
  Author: Oğuz Öztürk, Enes İyidil
6
6
  Maintainer: BGTS
@@ -69,7 +69,7 @@ that actually answer it — ranked, budgeted, and reproducible.
69
69
  [![MCP](https://img.shields.io/badge/MCP-compatible-000000.svg)](docs/mcp.md)
70
70
  [![Stars](https://img.shields.io/github/stars/bgts-ai-org/bgts-context-engine?style=flat&logo=github)](https://github.com/bgts-ai-org/bgts-context-engine/stargazers)
71
71
 
72
- [Quick start](#quick-start) · [Use it from your agent](#use-it-from-your-agent) · [How it works](#how-it-works) · [Supported models](#supported-models) · [Documentation](#documentation) · [Türkçe](README.tr.md)
72
+ [Quick start](#quick-start) · [Use it from your agent](#use-it-from-your-agent) · [How it works](#how-it-works) · [Supported models](#supported-models) · [Documentation](#documentation) · [Website](https://bgts-ai-org.github.io/bce-microsite/) · [Türkçe](README.tr.md)
73
73
 
74
74
  </div>
75
75
 
@@ -16,7 +16,7 @@ that actually answer it — ranked, budgeted, and reproducible.
16
16
  [![MCP](https://img.shields.io/badge/MCP-compatible-000000.svg)](docs/mcp.md)
17
17
  [![Stars](https://img.shields.io/github/stars/bgts-ai-org/bgts-context-engine?style=flat&logo=github)](https://github.com/bgts-ai-org/bgts-context-engine/stargazers)
18
18
 
19
- [Quick start](#quick-start) · [Use it from your agent](#use-it-from-your-agent) · [How it works](#how-it-works) · [Supported models](#supported-models) · [Documentation](#documentation) · [Türkçe](README.tr.md)
19
+ [Quick start](#quick-start) · [Use it from your agent](#use-it-from-your-agent) · [How it works](#how-it-works) · [Supported models](#supported-models) · [Documentation](#documentation) · [Website](https://bgts-ai-org.github.io/bce-microsite/) · [Türkçe](README.tr.md)
20
20
 
21
21
  </div>
22
22
 
@@ -14,7 +14,7 @@ veren sekiz sembolü sıralanmış, bütçelenmiş ve yeniden üretilebilir şek
14
14
  [![MCP](https://img.shields.io/badge/MCP-uyumlu-000000.svg)](docs/mcp.md)
15
15
  [![Yıldızlar](https://img.shields.io/github/stars/bgts-ai-org/bgts-context-engine?style=flat&logo=github)](https://github.com/bgts-ai-org/bgts-context-engine/stargazers)
16
16
 
17
- [Hızlı başlangıç](#hızlı-başlangıç) · [Ajanınızdan kullanma](#ajanınızdan-kullanma) · [Nasıl çalışır](#nasıl-çalışır) · [Desteklenen modeller](#desteklenen-modeller) · [Dokümantasyon](#dokümantasyon) · [English](README.md)
17
+ [Hızlı başlangıç](#hızlı-başlangıç) · [Ajanınızdan kullanma](#ajanınızdan-kullanma) · [Nasıl çalışır](#nasıl-çalışır) · [Desteklenen modeller](#desteklenen-modeller) · [Dokümantasyon](#dokümantasyon) · [Site](https://bgts-ai-org.github.io/bce-microsite/) · [English](README.md)
18
18
 
19
19
  </div>
20
20
 
@@ -5,4 +5,4 @@ specification for details. This package is the provider side of the deterministi
5
5
  contains no LLM and produces reproducible context packages.
6
6
  """
7
7
 
8
- __version__ = "0.2.4"
8
+ __version__ = "0.3.0"