Repository navigation
v4.3.0
The MCP server tells every host which tool to call at each stage of a task, and convergence_score stops calling a change's own tests, changelog, fixtures and docs drift. It also follows @/ alias imports and matches the joined spelling of a camelCase product name (OpenPanel → lib/openpanel.ts). No command, field or schema was removed. Convergence receipts move to engine 0.5.0, and the index cache moves to version 12, so existing indexes rebuild once.
Added
- The MCP server sends its workflow to every host.
initializenow returnsinstructionsthat say which tool to call at each stage of a task:context_packfirst, arepo_searchretry when the pack is weak,change_impactbefore editing,convergence_scorebefore each commit andreview_gatebefore a pull request. The workflow used to live only in one host's instruction file, so an agent on another host never saw it. The text is defined once insrc/lib/agent-workflow.js, and a test fails if it names a tool the server does not list.
Fixed
convergence_scoreno longer calls a change's own tests, changelog and eval data drift.- A test whose name adds a suffix to a confirmed file (
mcp-dispatch.test.jsformcp.js) counts as its test. - With at least one confirmed owner, the changelog entry and fixture or eval data (
evals/fixtures/…,evals/corpus.json) are in scope under the newowner-changelogandowner-test-datarules. - A ranking fix that added an eval fixture and recorded its changelog scored 52/100, with every fixture file listed as drift.
- The convergence engine moves to
0.3.0, so0.2.0receipts are not recomputed.
- A test whose name adds a suffix to a confirmed file (
- The gate no longer treats fixture files as risk-sensitive.
isGateRiskPathskipsfixtures,__fixtures__,testdataandtest-datadirectories, as it already did for tests and docs. A fixture repository'smiddleware/admin-auth.tshad madereview_gatewarn. Real code under aneval/orevals/folder still gates. - A repository deleted from disk no longer fails every search.
repo_searchlists it understale, with a hint, instead oferrors.- The next
solumbe indexdrops it from the catalog and reports it underpruned.
- A request that names a tool reaches the code that implements it.
- A registry names its tools as strings:
{ name: "convergence_score" }in a tool table, andcase "convergence_score":in the switch that dispatches it. The indexer only knew declarations, socontext_packmissedsrc/lib/mcp.jsfor a request about MCP tools, andconvergence_scorecalledconverge.jsdrift in a change to it. - Identifier-shaped strings in those two places are now indexed as
registeredsymbols, together with the functions their entry calls. - A request naming one pins the module that exports the called function, through the registry's own imports (
converge.jsforconvergence_score). The registry is surfaced as its definer. - Display names such as "Convergence Score" are not indexed.
- The index cache moves to version 12, so existing indexes rebuild once.
- A registry names its tools as strings:
- A failing accuracy eval says FAIL instead of crashing. The closing line called
.findon the accuracy eval's cases, which are grouped by suite ({ retrieval, risk }), so a run below threshold threwdata.cases?.find is not a function. convergence_scorereads what the change adds to place a file.- A test or source file whose added lines import a confirmed file is in scope (
owner-test, and the newowner-import). A source file still needs no risk flag that file lacks. - A doc whose added lines name a confirmed or inferred file is in scope (
owner-doc). - #273 had four files wrongly called drift:
ast.js, which now imports a helper fromtext.js; a test namedregistered-names.test.js; its gap note; anddocs/EVALS.md. Its score moves from 59 to 70, with scope and risk alignment both at 100. - The convergence engine moves to
0.4.0.
- A test or source file whose added lines import a confirmed file is in scope (
convergence_scorefollows root-alias imports.- The
owner-importrule, and tests placed by import, now resolve@/…,~/…and#/…specifiers from the repository root orsrc/, the form Next.js and Vite apps use. They only followed relative imports before. - On the bashbop-event-web analytics change (BASHBOP/bashbop-event-web#622), every screen wired to the confirmed
utils/analytics.tsthrough@/utils/analyticscounted as drift: 25 drift files, scope 16, 51/100. Now 10 drift files remain, scope is 68 and the score is 69/100. The ten that remain are six risk-flagged files, which still need their own review by design, and four that changed without adding an import. - The convergence engine moves to
0.5.0, so0.4.0receipts are not recomputed.
- The
- A request naming a camelCase product reaches the file named after it. "OpenPanel" splits into
openandpanel, while the file islib/openpanel.tsand the package@openpanel/react-native.context_packandchange_impactnow also weigh the joined spelling. On the bashbop-mobile-app request,lib/openpanel.tsrose from ninth to third incontext_pack, and intochange_impact's top eight from outside its top twelve. - A user config from before the rename applies again. The rename moved the user config from
~/.config/otito/config.jsonto~/.config/solumbe/config.jsonwith no fallback, so settings left in the old file, a telemetry opt-in among them, stopped applying and local usage capture went quiet with nothing reported. When the Solumbe file is missing, the old one is read; both honourXDG_CONFIG_HOME. The firstsolumbe config setorsolumbe telemetrywrite starts from the old settings, and the old file is left in place.solumbe doctorwarns while the old file is in use and prints the command that moves it,solumbe confignames the file it read, anddoctor --jsoncarries a newuserConfigfield. solumbe routestarts one git process instead of six. AX inspected the whole repository (a file listing plus four git metadata calls) for four fields it reads frompackage.jsonand the top-level directories, androuteruns AX on every routed prompt. Where each process launch is slow, the six launches pushedroutepast theUserPromptSubmithook's six-second budget, so the hook gave no tier and logged no decision. AX now reads those fields throughinspectRepoBasics, which runs no git; its score is unchanged.