- drop the algorithm/gate source SHA256 freeze: every ranking change
required a manual manifest hash sync, coupling code evolution to the
manifest
- drop the --require-sealed release gate (sealed qrels hash, dual
signatures, coverage minima, independent-result thresholds) and its
tool-search-independent-data-gate Makefile target
- behavior regression protection stays with the Go evaluation sentinels
that run the real assembled catalog
The algorithm freeze gate intentionally rejects silent ranking source
changes; this records the new source set hash after the ranking hardening
commit.
- default engine: fielded BM25 ensemble (action_v1 remains a shadow candidate)
- add --explain score_breakdown: per-field contributions, structured
multiplier, query classification and avoid_when penalty
- add DWS_TOOL_SEARCH_* env overrides (algorithm, k1/b, field weights,
explain) for release-independent tuning and rollback
- tokenizer: CJK unigram+bigram so single-character intents match; align
isToolSearchCJK with unicode.Han used by the evaluation slices
- structured routing: extend vocabularies with English synonyms,
word-boundary matching for ASCII values, restrict the rerank gate to
technical identifiers only
- avoid_when demotion layer wraps every lexical algorithm (Forbidden@5
proxy 37.55% -> 0); intent-overlap matching rejected after control
showed it demoted gold answers (Recall@5 0.8664 -> 0.7845)
- remove the OA task_id +1.00 fixture-specific multiplier
- build the default engine once per process for long-lived hosts
- evaluation baseline: intent-proxy R@5 990/1123 (88.16%); update
integration sentinels accordingly