Commit Graph
100 Commits
Author SHA1 Message Date
Martin Vogel 0210ea9794 fix(ruby-lsp): search each ancestor once per method lookup
The mixin walk recursed into prepend and include at every level with only
the depth cap of 16 as a bound, so a module that both prepends and
includes the next one doubled the paths per level: a miss on a chain of n
such modules cost 2^n visits (measured 4 -> 20,744 for n = 2..14).

Each lookup is now one walk that carries the fail-closed blocked flag and
a visit stamp. Ruby linearizes ancestors, so a module reached a second
time in one walk was already searched and missed (a hit or a block would
have ended the walk); skipping the repeat keeps every lookup linear in the
ancestors the file declares. Lookup order, hits and the fail-closed rules
are unchanged. The stamps live on the per-file class table, so the walk
allocates nothing.

The walk entries feed CBM_LSP_WORK (seam builds only; product builds
compile it to nothing). rubylsp_mixin_walk_visits_each_module_once pins
linear work for the doubled chain on the instance and the class side
(before: 66 -> 4,098 visits for n = 6 -> 12; after: 14 -> 26) and keeps a
diamond and a prepend-plus-include pair resolving exactly once.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 21:17:21 +01:00
Martin Vogel a3831c9795 Merge pull request #2017 from kobaz/feat/path-allow-broad-too-shallow-override
feat(workspace): add PATH_ALLOW_BROAD override for too-shallow roots
2026-10-29 07:53:11 +01:00
Martin Vogel d807b1eca7 Merge pull request #2419 from Fieldnote-Echo/perf/py-lexical-ancestor-kind
perf(python): climb the walk cursor for scope-directive and default checks
2026-10-29 06:32:06 +01:00
Martin Vogel 3be5a02708 Merge pull request #2601 from bline/fix/doc-link-missing-member
fix(doc-links): report a path::member reference to a missing member (#2587)
2026-10-29 04:47:39 +01:00
Martin Vogel 59d6b52679 Merge pull request #2421 from Fieldnote-Echo/fix/dotd-depinfo-sniff
fix(discover): keep make/cargo dep-info .d files out of the D grammar
2026-10-29 04:32:21 +01:00
Martin Vogel ba4122d3cc Merge pull request #2418 from Fieldnote-Echo/fix/sequential-definitions-retention
fix(pipeline): free trees and compact results in sequential definitions pass
2026-10-29 03:47:38 +01:00
Martin Vogel 006101ae4f Merge pull request #1710 from benrfairless/fix/ruby-namespaced-constructor-callee
fix(extraction): reduce A::B.new callee to the constant
2026-10-29 03:32:26 +01:00
Martin Vogel 2658a181b5 Merge pull request #2600 from bline/fix/snapshot-coherence
fix(mcp): verify content for freshness and snippets; expose store generation (#2585)
2026-10-29 03:27:46 +01:00
Martin Vogel beddaaaa2e Merge pull request #2731 from DeusData/fix/mimalloc-3.5.3-preinit-free
fix(mem): vendor mimalloc 3.5.3 so free(NULL) before init is safe (supersedes #2562)
2026-10-29 02:47:58 +01:00
Martin Vogel ba0f8a8409 Merge pull request #2717 from oscarbol09/docs/windows-troubleshooting
docs(troubleshooting): add Windows troubleshooting guide
2026-10-29 02:47:52 +01:00
Martin Vogel 7b398de4e4 Merge pull request #2769 from gaurav0107/fix/2033-go-type-alias-alias-of-is-never-register
fix(go-lsp): follow a type alias declared in another file of the package
2026-10-29 02:32:34 +01:00
Martin Vogel c4e37c1239 Merge pull request #2290 from knewstimek/pr/windows-setenv-utf8
fix(windows): set UTF-8 environment values through wide CRT
2026-10-29 01:56:52 +01:00
Martin Vogel f1efbf60d8 Merge pull request #2746 from gaurav0107/fix/2297-typescript-calls-through-a-renamed-named
fix(ts-lsp): resolve calls through renamed named imports
2026-10-29 01:33:12 +01:00
Martin Vogel 0002acd002 Merge pull request #2090 from sanskar717/feat/solidity-support
fix(lang): track Solidity modifier invocations as decorators
2026-10-29 01:08:06 +01:00
Martin Vogel 442989ebaa Merge pull request #2754 from gaurav0107/fix/2666-c-extraction-a-macro-argument-identifier
fix(pipeline): a bare C reference never binds a struct Field
2026-10-29 01:07:58 +01:00
Martin Vogel 72ab1cefe1 Merge origin/main into perf/py-lexical-ancestor-kind
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-29 00:19:09 +01:00
Martin Vogel e1405eaeb7 Merge origin/main into fix/sequential-definitions-retention
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 23:27:16 +01:00
Martin Vogel 3bd645efd5 Merge origin/main into pr/windows-setenv-utf8
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:15:29 +01:00
Martin Vogel 95279bd74f Merge origin/main into fix/snapshot-coherence
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:15:21 +01:00
Martin Vogel e2c9de1d1b Merge origin/main into feat/solidity-support
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:14:55 +01:00
Martin Vogel ba246dad4f Merge origin/main into fix/2033-go-type-alias-alias-of-is-never-register
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:14:30 +01:00
Martin Vogel 9fe25c476f Merge origin/main into fix/doc-link-missing-member
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:14:22 +01:00
Martin Vogel 9ae55eb0b6 Merge origin/main into feat/path-allow-broad-too-shallow-override
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:13:51 +01:00
Martin Vogel eb76d04acf Merge origin/main into fix/dotd-depinfo-sniff
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:13:34 +01:00
Martin Vogel 1aeaf6f024 Merge origin/main into fix/2666-c-extraction-a-macro-argument-identifier
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:13:26 +01:00
Martin Vogel 849e74f69e Merge origin/main into fix/ruby-namespaced-constructor-callee
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:13:18 +01:00
Martin Vogel 5d374a7634 Merge origin/main into fix/2297-typescript-calls-through-a-renamed-named
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:13:10 +01:00
Martin Vogel 5d97172b89 Merge origin/main into docs/windows-troubleshooting
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:12:53 +01:00
Martin Vogel ebdf9bafd5 test(mem): unpoison mimalloc output before the handler reads it
The MSan output handler checked msg[0] before marking the text
initialized, so MSan reported the handler's own read
(tests/test_main.c:2151). Unpoison first, then test for the empty
replay.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 18:11:31 +01:00
Martin Vogel dca2a44ef0 Merge pull request #2807 from divakantpandey/fix/2787-pi-extension-string-enum
fix(cli): emit string enums as Type.String({ enum }) in Pi adapter (#2787)
2026-10-28 18:10:35 +01:00
Martin Vogel e425666aab Merge pull request #2760 from gaurav0107/fix/2388-extraction-remaining-fixed-size-tsnode-w
fix(extract): YAML walkers grow their stacks instead of capping content
2026-10-28 18:08:25 +01:00
Martin Vogel 635f8e3b63 Merge pull request #2309 from BumaldaOverTheWater94/fix/home-user-symlink-alias
fix(cli): trust root-owned per-user /home entries during activation walk
2026-10-28 18:08:15 +01:00
Martin Vogel 2796460efe Merge pull request #2305 from pcristin/fix/issue-2265-unresolved-call-coverage
fix(pipeline): expose unresolved call coverage
2026-10-28 18:07:59 +01:00
Martin Vogel ea892c5349 Merge pull request #2817 from DeusData/feat/drift-reminder-hook
feat(cli): note when a Claude Code session keeps searching without the graph
2026-10-28 18:07:44 +01:00
Martin Vogel 820cd02307 Merge pull request #2161 from htarnacki/fix/discover-external-fast-mode
fix(discover): retain external source directories in fast mode (#2151)
2026-10-28 07:47:51 +01:00
Martin Vogel 1306c276f2 Merge origin/main into fix/2033-go-type-alias-alias-of-is-never-register
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 07:27:51 +01:00
Martin Vogel ee9dc48d1e Merge origin/main into fix/issue-2265-unresolved-call-coverage
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 07:07:50 +01:00
Martin Vogel 5b3fe0646f Merge origin/main into fix/ruby-namespaced-constructor-callee
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 06:48:23 +01:00
Martin Vogel 62965bc0f6 test(doc-links): exercise the ambiguous member row on a Ruby group (#2587)
The "group shrinks" step of doc_links_md_member_missing_incremental
removed one of two Python `area` methods and expected the closure-repair
route. Since the Python namespace admission on main (merged into this
branch with origin/main), a Python file whose surface changes always
takes the full route (closure_decline reason=python_namespace_changed),
so the step ran FORCED_FULL on every platform; the Windows leg was simply
the first to report it. Nothing here depends on timing: the planner
compares content hashes.

The group now lives in a Ruby file. Ruby has no doc-link scope, so the
lost method reports no removed name and the document re-resolves only
through the ambiguous `path::member` rule, which this step exists to
bind. (A Rust group was tried too: its scope reports the method as a
removed name, so the step passed with the rule removed.)

Test: the step takes closure repair with closure=2 (shapes.rb and
docs/areas.md). With "ambiguous" dropped from doc_row_member_reason it
stays on closure repair with closure=1 and keeps the stale ambiguous row
where the full index has the Areas -> Square.area edge.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 05:37:32 +01:00
Martin Vogel 6217b49381 Merge origin/main into feat/solidity-support
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 05:27:56 +01:00
Martin Vogel 8984e7e989 Merge origin/main into fix/2297-typescript-calls-through-a-renamed-named
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 05:27:48 +01:00
Martin Vogel 8aeee865e6 Merge origin/main into pr/windows-setenv-utf8
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 04:27:57 +01:00
Martin Vogel bd144c2544 Merge origin/main into fix/snapshot-coherence
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 04:07:48 +01:00
Martin Vogel 8012a7516f Merge origin/main into fix/2388-extraction-remaining-fixed-size-tsnode-w
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 03:28:13 +01:00
Martin Vogel 1f934b6afb Merge pull request #2774 from RithvikReddy0-0/python-prefixed-string-urls
extract: fold prefixed and triple-quoted Python string URLs
2026-10-28 03:07:57 +01:00
Martin Vogel b956413eb4 Merge pull request #2423 from harshitaajoshi/fix/2386-bm25-label-window
fix(mcp): apply search_graph label filter inside the BM25 candidate window (#2386)
2026-10-28 02:27:53 +01:00
Martin Vogel 5810183b3b Merge pull request #2430 from AmirF194/fix/2276-incremental-reindex-root-path-stale
fix(pipeline): refresh the projects row's root_path on the delta route
2026-10-28 01:08:02 +01:00
Martin Vogel 0f8b46570c test(mem): unpoison mimalloc output in the MSan test runner
The MSan lane compiles mimalloc without -fsanitize=memory on purpose, so
MSan never sees mimalloc write its own stack. Its text output is the one
place those stack bytes reach an MSan interceptor: a message formatted in
a mimalloc stack buffer arrives at fputs still carrying the shadow an
earlier instrumented frame left there (cbm_log's line_buf), and MSan
reports initialized bytes as uninitialized.

mimalloc 3.5.3 prints an arena-alignment fallback warning on the x86-64
MSan lane, which turned this into a use-of-uninitialized-value report in
the mem suite (_mi_prim_out_stderr, 43 bytes: the per-thread prefix).

Under __has_feature(memory_sanitizer) only, the test runner now registers
a mimalloc output handler at the top of main that unpoisons the finished
text and writes it to stderr. Registering replays mimalloc's delayed-output
buffer, which its constructor already wrote to stderr before main, so the
handler skips that replay instead of repeating it behind a stray newline.
Production code and every non-MSan build are unchanged.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 01:07:23 +01:00
Martin Vogel 3d65c609e1 fix(mem): define MI_MINGW_UCRT64 for MinGW mimalloc builds
mimalloc 3.5.3 treats a MinGW build as having a process-attach hook only
when MI_MINGW_UCRT64 is defined (src/prim/windows/prim.c). Upstream's
CMake sets it; Makefile.cbm did not. src/prim/prim.c therefore also
compiled its constructor, and _mi_auto_process_init ran twice on Windows:
once from that constructor and once from the CRT TLS callback.

The second run flushes the delayed-output buffer to stderr again, and the
first flush had left a newline in it, so every Windows run started with a
blank line on stderr. That is what failed smoke-win's one-line --version
check. In the MI_DEBUG=2 test build the same second run reaches
mi_assert_internal(mi_out_default == NULL) in options.c, which aborts.
3.3.2 had no such condition.

Define it for IS_MINGW builds in both the production and the test
mimalloc flags. Every MinGW toolchain this repository builds with (MSYS2
CLANG64 and CLANGARM64) is UCRT. No vendored source changes.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 01:07:23 +01:00
Martin Vogel 406f6c7c71 Merge origin/main into fix/doc-link-missing-member
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 00:44:29 +01:00
Martin Vogel 69155bcf6c fix(incremental): re-resolve documents whose member rows name a changed file (#2587)
An unresolved `path::member` row (missing or ambiguous) leads to its
file by no edge, so an incremental run never re-resolved the document
when that file changed. Two edits then left a row where a full index
has an edge: a body edit that writes a missing member's name (no
definition added), and a same-named pair of methods shrinking to one
(the name stays, so no removed name reaches the rows).

The closure now also takes the files whose missing or ambiguous rows
with "::" name a changed or deleted file, matched by base name since a
reference may be written relative to the document or to the root. When
memory runs out, every such row's file is taken.

Test: doc_links_md_member_missing_incremental requires incremental ==
full on the closure-repair route for both edits and for dropping the
name again. Without the new closure rule the "member written" step
diverges; with it limited to missing rows the "group shrinks" step
does.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 00:43:16 +01:00
Martin Vogel 1a7239f52b fix(doc-links): a member the code file writes keeps its file edge (#2587)
A `path::member` reference became a missing row whenever the member
lookup found no definition node, but real documentation names members
the file has without a node the lookup binds: a call form
(`src/util.py::clamp()`), a C macro or a prototype in a header, a
TypeScript namespace, a Python enum member, an annotated class
attribute. Those lost their correct file edge and were counted as doc
rot.

A member now reads without a trailing call form, so `clamp()` binds
`clamp`. When no definition matches, the resolver reads the code file
and calls the member missing only when the file does not write its name
at all (a whole identifier, case-sensitive); a member the file writes
keeps the file edge it had before. A file that cannot be read whole
makes no claim. Ambiguous members are unchanged.

Test: doc_links_md_member_written_issue2587 indexes each shape under its
own heading, and two members that stay missing (Color::BLUE, which the
file writes only as LIGHT_BLUE and a lowercase "blue", and
no_such_function). On the previous head all seven shapes are missing
rows; without the call-form trim the call form is; without the
identifier boundary, or with a case-insensitive match, BLUE takes the
file edge.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-28 00:43:12 +01:00
Martin VogelandTamer a36b2ee6da docs(troubleshooting): refresh Windows entries for v0.12.x
- Non-ASCII paths: drop the NTFS junction example; the workaround is
  ASCII-only paths for the two variables, or an upgrade.
- Update entry: name the real command (update, not upgrade) and mark
  #1168 as closed, fixed in v0.10.0.
- Index worker: from v0.12.0 a worker that exits without returning a
  result is no longer counted as a success, and its log is kept; ask
  for logs when indexing still fails on v0.11.0 or newer.
- Antigravity: state the affected range (all releases through v0.12.1
  when neither detection signal is present) and which signal each
  version checks; scope the duplicate binary to v0.9.x and earlier.
- OpenCode: list the detection signals per version (PATH, config, and
  from v0.12.0 the data folder), the 4 KB PATH and npm/mise/scoop shim
  gaps fixed after v0.12.1 (#2381), and a workaround per version.

The page structure and the original entries were first drafted by Tamer
in #2262.

Refs #1170

Co-authored-by: Tamer <tamer.elbakkali@gmail.com>
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 23:49:24 +01:00
Martin Vogel 74982efc60 test(cli): restore Pi abort-kill assertion dropped alongside #2787 test
The #2787 change added client_adapter_pi_emits_string_enum_issue2787 directly below client_adapter_pi_wraps_result_and_honors_abort and, in the same hunk, removed that test's check that the generated abort handler kills the cli child (if (!child.killed) child.kill();). The generator still emits the line; restore the assertion byte-for-byte so the abort path keeps its coverage.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 23:41:04 +01:00
Martin Vogel 7716153630 Merge origin/main into fix/home-user-symlink-alias
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 23:36:28 +01:00
Martin Vogel 7e55bc110b Merge branch 'main' into fix/mimalloc-3.5.3-preinit-free 2026-10-27 20:03:26 +01:00
Martin Vogel a0940ce152 Merge origin/main into fix/2666-c-extraction-a-macro-argument-identifier
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 20:03:12 +01:00
Martin Vogel df2c35f841 Merge origin/main into fix/discover-external-fast-mode
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 20:03:02 +01:00
Martin Vogel 3f4afec3ee Merge origin/main into fix/dotd-depinfo-sniff
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 20:02:57 +01:00
Martin Vogel 73833def24 Merge origin/main into fix/ruby-namespaced-constructor-callee
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 20:02:52 +01:00
Martin Vogel 8fd93a2e08 test(smoke): pin the Claude PostToolUse matcher that covers the graph tools
Smoke check 8d required Claude's PostToolUse matcher to be exactly Read. The
drift note widens it on purpose to Read|mcp__.*codebase-memory-mcp__.*, so a
graph tool call can reset the search count, and the macOS PR smoke failed on
it. 8d now requires exactly the new matcher, and besides a Search matcher it
also refuses a catch-all ("*" or empty) matcher, as its comment promised.

Checked against real installs: the previous binary's Read-only settings fail
8d, the new install passes, and the new install plus a catch-all PostToolUse
entry fails.

Refs #509

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:32:04 +01:00
Martin Vogel 9c075722c8 Merge origin/main into fix/issue-2265-unresolved-call-coverage
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:30:40 +01:00
Martin Vogel 21d3550f5d Merge origin/main into pr/windows-setenv-utf8
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:17:07 +01:00
Martin Vogel cb3191fe4f Merge origin/main into feat/path-allow-broad-too-shallow-override
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:16:26 +01:00
Martin Vogel abdd281566 Merge origin/main into fix/2388-extraction-remaining-fixed-size-tsnode-w
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:16:18 +01:00
Martin Vogel e897930388 Merge origin/main into fix/snapshot-coherence
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:16:10 +01:00
Martin Vogel 2382876cd0 Merge origin/main into feat/solidity-support
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:16:02 +01:00
Martin Vogel a2feed881c Merge origin/main into fix/2033-go-type-alias-alias-of-is-never-register
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:15:54 +01:00
Martin Vogel 9189dab772 Merge origin/main into fix/2297-typescript-calls-through-a-renamed-named
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:15:39 +01:00
Martin Vogel 27c1cdd955 Merge origin/main into python-prefixed-string-urls
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:15:32 +01:00
Martin Vogel cb0e6b5a2b Merge origin/main into fix/2386-bm25-label-window
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:15:17 +01:00
Martin Vogel 7ca765f69a Merge origin/main into fix/2276-incremental-reindex-root-path-stale
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:15:09 +01:00
Martin Vogel 83109dde52 Merge pull request #2802 from harshitaajoshi/fix/2797-relative-import-exact-path
fix(pipeline): never guess a same-named sibling for explicit ./ and ../ imports (#2797)
2026-10-27 19:12:29 +01:00
Martin Vogel e73eb9d6ae Merge pull request #2777 from gaurav0107/fix/1818-daemon-autoindex-skipped-omits-the-effec
fix(daemon): log the effective auto_index_limit in daemon.autoindex.skipped
2026-10-27 19:12:23 +01:00
Martin Vogel 70cd1a5568 Merge pull request #2622 from Lixsp11/fix/windows-sqlite-writer-64bit-offsets
fix(store): use 64-bit file offsets in the SQLite page writer
2026-10-27 19:12:17 +01:00
Martin Vogel 6ef815540d Merge pull request #2422 from Fieldnote-Echo/fix/py-definitions-oom
fix(py-lsp): walk each lambda body at most once per call chain
2026-10-27 19:12:10 +01:00
Martin Vogel aaf9021582 Merge pull request #1730 from henry-hz/upstream-pr/elixir-channels
fix(elixir): Phoenix channel extraction is unreachable in both branches
2026-10-27 19:12:04 +01:00
Martin Vogel 4edc6b7b30 Merge pull request #2724 from tmonestudio/fix/java-skip-dirs-and-typed-calls
fix(discover): keep JVM packages named like build dirs (part of #2661)
2026-10-27 19:11:57 +01:00
Martin Vogel 5948316c3d Merge pull request #2800 from WarGloom/fix/objectscript-empty-deserialize
fix: guard empty ObjectScript scanner state
2026-10-27 19:11:51 +01:00
Martin Vogel 5dcf253b45 Merge pull request #2555 from lorenzozanee/fix/js-template-leading-substitution-url
test(pipeline): guard base-URL constant in JS/TS template fetch URLs (#2540)
2026-10-27 19:11:44 +01:00
Martin Vogel 69b26df9f0 Merge pull request #2372 from lorenzozanee/fix/search-code-cancellation-observability
fix(mcp): report request timing in mcp.request logs
2026-10-27 19:11:15 +01:00
Martin Vogel 402617555c feat(cli): note when a Claude Code session keeps searching without the graph
The search hook gives each Grep, Glob or Bash search the matching graph
symbols, but a session can keep searching text for questions the graph answers
in one call (#509). Once a session has run three searches with no
codebase-memory-mcp tool call, the next augmentation now adds one factual line
saying so. The next note comes after six searches, then twelve, and any graph
tool call resets the count.

- State: a per-session counter in the process that runs hook requests (the
  daemon), keyed by the payload's session_id, in a bounded 64-slot table that
  evicts the least recently used session, behind a spin lock. Only searches
  that reach the graph lookup count. A search without an augmentation still
  counts, and the note waits for the next augmentation.
- Reset: Claude's managed PostToolUse entry now matches
  "Read|mcp__.*codebase-memory-mcp__.*", covering plain and plugin server
  names. The previous Read-only entry, as installs up to v0.12 wrote it, is
  recognized as owned, so install replaces it in place and uninstall removes
  either.
- Scope: Claude Code only. Codex sends the same event payload with a turn_id
  but has no reset hook, so its sessions are not tracked, and payloads without
  a session_id are not tracked either.
- Cost: a graph tool call now runs one hook round-trip to the daemon for the
  reset, about 130 ms on a local build.

Refs #509

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-27 19:04:47 +01:00
Martin Vogel 129443a0b7 Merge pull request #2801 from DeusData/feat/copilot-posttooluse-hook
feat(cli): give Copilot searches graph context through a PostToolUse hook
2026-10-27 19:04:13 +01:00
Martin Vogel 80db98038e Merge origin/main into perf/py-lexical-ancestor-kind
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 02:53:04 +01:00
Martin Vogel f13a13326d Merge origin/main into fix/snapshot-coherence
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 02:35:57 +01:00
Martin Vogel 572b749f02 Merge origin/main into fix/dotd-depinfo-sniff
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 02:34:53 +01:00
Martin Vogel 8530c8cd1c Merge pull request #2675 from attilaolah/musl
Fix build against musl
2026-10-26 02:29:09 +01:00
Martin Vogel 0685110e22 Merge origin/main into feat/path-allow-broad-too-shallow-override
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 02:27:02 +01:00
Martin Vogel d6109bfdfe Merge origin/main into fix/windows-sqlite-writer-64bit-offsets
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 02:26:54 +01:00
Martin Vogel a49481df70 Merge pull request #2602 from bline/fix/doc-link-moved-directory
fix(doc-links): report references into a moved directory as missing (#2588)
2026-10-26 02:18:59 +01:00
Martin Vogel 25665c6e4d Merge origin/main into fix/search-code-cancellation-observability
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>

# Conflicts:
#	src/mcp/mcp.c
2026-10-26 02:00:28 +01:00
Martin Vogel 14bf8f0c6c fix(mcp): keep request timing, defer protocol behaviour changes
Split the PR along the line the review asked for. The request timing and
transport fields stay: every mcp.request log line carries
handler_duration_ms, response_serialization_ms, cancelled and timed_out,
and a search that reaches its deadline logs status=timeout.

The behaviour changes go back to the base text and need a separate
maintainer decision: stricter jsonrpc/id parsing, dropping "result":null,
NULL returns from the response formatters, leaving the stdio loop on a
missing response or an input/output failure, the removed blocking-poll
fallback, the HTTP 500 path, the daemon session end on a missing response,
and the update-notice warning. Their tests go with them. The list_projects
sort guard is dropped as well (main has the same fix).

cbm_mcp_server_handle formats its three responses with
cbm_jsonrpc_format_response directly; a NULL reply still marks the request
as an error. The cbm_log_mcp_request checks in tests/test_log.c are back
with the new signature, plus checks for the new fields and for
status=timeout. clang-format on the new lines.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 01:58:34 +01:00
Martin Vogel f05c221e9c Merge pull request #2744 from harshitaajoshi/fix/2591-cypher-where-property-compare
fix(cypher): support property-to-property comparisons in WHERE (#2591)
2026-10-26 01:58:25 +01:00
Martin Vogel 4ef2d23b1d Merge pull request #2234 from lorenzozanee/fix/framework-entry-dead-code
fix(ui): preserve framework route entry points from dead-code status
2026-10-26 01:57:50 +01:00
Martin Vogel e33f32222b Merge origin/main into pr/windows-setenv-utf8
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 01:52:26 +01:00
Martin Vogel 9e7794b04f Merge pull request #2443 from bmcnaboe/docs/help-daemon-subcommand
docs(cli): list daemon <start|stop|status> in --help
2026-10-26 01:45:17 +01:00
Martin Vogel 807a780feb Merge origin/main into fix/js-template-leading-substitution-url
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 01:42:42 +01:00
Martin Vogel 0c83f60442 Merge origin/main into fix/2276-incremental-reindex-root-path-stale
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 01:39:54 +01:00
Martin Vogel f0f88b9c4d Merge origin/main into upstream-pr/elixir-channels
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 01:26:17 +01:00
Martin Vogel c6932bcc03 Merge origin/main into fix/2297-typescript-calls-through-a-renamed-named
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-26 01:23:10 +01:00