Commit Graph
3405 Commits
Author SHA1 Message Date
Martin Vogel 369cf768c2 Merge pull request #2523 from DeusData/fix/issue-514-constructor-fields-v2
fix(typescript): resolve constructor properties and new-initialized fields
2026-10-04 16:24:22 +02:00
Martin Vogel 266e2814e3 Merge pull request #2518 from DeusData/fix/search-code-scratch-isolation-v2
test(mcp): isolate search scratch cleanup fixtures
2026-10-04 16:24:15 +02:00
Martin Vogel 5e6fa657ee Merge pull request #2517 from DeusData/fix/uninstall-keeps-indexes-v2
fix(cli): keep project indexes by default during uninstall
2026-10-04 16:24:09 +02:00
Martin Vogel 20fd3aadb5 Merge pull request #2511 from DeusData/fix/issue-1364-distinct-before-cap
fix(cypher): count DISTINCT rows against the row cap
2026-10-04 16:24:03 +02:00
Martin Vogel 873a966504 Merge pull request #2510 from DeusData/fix/issue-1484-close-range-v2
fix(subprocess): close inherited descriptors with kernel range operation
2026-10-04 16:23:58 +02:00
Martin Vogel 02abf31016 Merge pull request #2509 from DeusData/fix/issue-1186-psr4-imports-v2
fix(pipeline): resolve PSR-4 imports to exact class files
2026-10-04 16:23:52 +02:00
Martin Vogel dffec08c40 Merge pull request #2498 from DeusData/fix/issue-1277-py-crossfile-fields-v2
fix(python): retain typed fields across file boundaries
2026-10-04 16:23:46 +02:00
Martin Vogel 3a26acf402 Merge pull request #2496 from DeusData/fix/issue-1357-default-branch-v2
fix(mcp): detect changes from the repository default branch
2026-10-04 16:23:38 +02:00
Martin Vogel 79363adbc7 Merge pull request #2495 from DeusData/fix/issue-598-graphql-route-name
fix(pipeline): key GraphQL routes by operation name
2026-10-04 16:23:32 +02:00
Martin Vogel 5a9f6e7637 Merge pull request #2494 from DeusData/fix/issue-1300-silent-worker-exit
fix(index): report clean worker exits without a response
2026-10-04 16:23:27 +02:00
Martin Vogel bad3e482e2 Merge pull request #2469 from DeusData/fix/issue-1419-sqlite-write-amplification
fix(store): cut WAL write amplification on 64 KiB-page indexes (#1419)
2026-10-04 16:23:09 +02:00
Martin Vogel b5649e9823 Merge pull request #2468 from DeusData/fix/issue-1167-1180-client-detect
fix(cli): client detection for OpenCode, Hermes, Claude (#1167, #1180)
2026-10-04 16:23:04 +02:00
Martin Vogel 8c12de9b16 Merge pull request #2467 from DeusData/fix/issue-2228-toml-foreign-tables
fix(install): keep foreign tables between the managed TOML markers (#2228)
2026-10-04 16:22:57 +02:00
Martin Vogel a5d2ea0e18 Merge pull request #2466 from DeusData/fix/issue-1153-instance-receivers
fix(cpp): resolve Class::member calls across files (#1153)
2026-10-04 16:22:51 +02:00
Martin Vogel 3aef1c0bd8 Merge pull request #2464 from DeusData/fix/route-registration-before-xlang-suppression
fix(pipeline): route registrations survive the cross-language guard
2026-10-04 16:22:44 +02:00
Martin Vogel 971afc069d Merge pull request #2463 from DeusData/fix/http-axios-capitalized-import
fix(pipeline): classify capitalized `Axios` calls as HTTP clients
2026-10-04 16:22:26 +02:00
Martin Vogel 59a44d80a9 Merge pull request #2462 from DeusData/fix/http-typed-call-no-url-twin
fix(pipeline): no method-less arg_url twin for a typed HTTP call
2026-10-04 16:22:20 +02:00
Martin Vogel c4e1ad4c87 Merge pull request #2448 from DeusData/fix/hook-augment-log-path
fix(hook-augment): log under the cache dir, never at a cut-off path
2026-10-04 16:22:11 +02:00
Martin Vogel 6644fc433d Merge pull request #2447 from DeusData/fix/issue-1146-laravel-withrouting-prefix
fix(routes): compose the Laravel 11+ withRouting api prefix into Route paths (#1146)
2026-10-04 16:22:05 +02:00
Martin Vogel f6fe11dde9 Merge pull request #2446 from DeusData/fix/issue-1690-skill-project-name
fix(mcp): resolve a directory project arg to its owning project (#1690)
2026-10-04 16:21:59 +02:00
Martin Vogel 01fd6cb5e6 Merge pull request #2342 from DeusData/feat/callable-identity-plumbing
feat(identity): callable identity plumbing, no language enabled (#2061)
2026-10-04 16:21:48 +02:00
Martin Vogel db1dcf4600 Merge pull request #2333 from DeusData/fix/issue-1948
feat(watcher): opt-in polling of non-git project roots (#1948)
2026-10-04 16:21:40 +02:00
Martin Vogel 510fc2d695 Merge pull request #2329 from DeusData/fix/issue-1748
fix(csharp): refresh grammar for collection expressions in conditionals (#1748)
2026-10-04 16:21:07 +02:00
Martin Vogel 4793550568 style(cli): format uninstall help with clang-format 20
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 21:20:26 +02:00
Martin Vogel a4a65ed0ea fix(typescript): resolve constructor properties and new-initialized fields
Reuse scoped constructor typing for direct new field initializers and
collect annotated constructor parameter properties as class fields.

Refs #514

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 20:16:31 +02:00
Martin Vogel c38bfff4c2 test(mcp): isolate search scratch cleanup fixtures
Let each test server use a private scratch parent so cleanup checks cannot
count other processes' temporary files. Observe live scratch in the
hook-rejection fixture, preserve deadline assertions, and cover scratch
creation failure with a valid path filter for leak-sanitizer validation.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 19:15:19 +02:00
Martin Vogel ba6307f037 fix(cli): keep project indexes by default during uninstall
Require --delete-indexes for automatic or noninteractive index removal.
Keep the separate terminal prompt with a default of retaining indexes,
and preserve dry-run and guarded activation ordering.

Refs #2200

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 19:11:36 +02:00
Martin Vogel fe8dd9df7e fix(mcp): release path filters on search setup errors
Free the compiled path_filter on missing pattern, missing project, unknown
project root, and failed scratch creation. Exercise the three argument and
project validation exits with a valid filter for leak-sanitizer coverage.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 19:05:00 +02:00
Martin Vogel bf2daa3603 fix(lsp): detach field arrays before overlay refinement
Copy inherited field-type pointer arrays into the writable registry arena
before Python refines an existing field. Keep shared type objects intact
and avoid retaining per-file scratch types in the sealed fallback.

Add deterministic shared-state and later-overlay coverage, retaining the
sequential Python field regression and adding a forced-parallel variant.

Refs #1277

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 18:25:03 +02:00
Martin Vogel 91ba8a3aa9 fix(subprocess): close inherited descriptors with kernel range operation
Use the Linux close_range syscall or BSD closefrom before exec, retaining
the bounded close loop when the range operation is unavailable. Add
coverage of descriptor closure, strategy selection, and forced fallback.

Refs #1484

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 18:09:22 +02:00
Martin Vogel 830f0ccfae fix(pipeline): resolve PSR-4 imports to exact class files
Preserve import kinds and resolve class imports through Composer prefixes
to the existing target class file, including autoload-dev mappings.

Refs #1186

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 17:56:11 +02:00
Martin Vogel 519c765e1f fix(python): retain typed fields across file boundaries
Carry declared instance-field types through extraction and result
compaction into the shared Python type registry so chained calls through
imported classes resolve their receiver types.

Refs #1277

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 01:37:27 +02:00
Martin Vogel 72f206d18f fix(mcp): resolve repository default for detect_changes
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 00:49:21 +02:00
Martin Vogel d13c0ecb73 test(cli): mark Claude Code installations in hook fixtures
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-03 00:21:00 +02:00
Martin Vogel 8292e3e807 test: size hook log temp buffers for Windows paths
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-02 20:51:31 +02:00
Martin Vogel 810d677d41 test(smoke): follow the #1180 Hermes home and Claude detection
The client-detection fix moved the Windows Hermes home to
%LOCALAPPDATA%\hermes and stopped counting a bare ~/.claude directory as a
Claude Code install. The smoke script followed only part of the way.

Hermes: 8x and 8x-i read the new HERMES_HOME_DIR, but 8x-ii still looked
for the pre_llm_call hook in ~/.hermes/config.yaml, and the uninstall
absence checks 9m and 9n still named ~/.hermes. On Linux and macOS
HERMES_HOME_DIR is ~/.hermes, so the stale paths pointed at the right
directory and nothing showed. Only on Windows do the two differ: 8x-ii
failed on a hook that install had written to the new home, and 9m and 9n
passed without looking at any file install had produced. All three now use
HERMES_HOME_DIR. The assertions are unchanged.

Claude Code: the fixtures of 9b-2, 9b-3, 9b-8 and both Phase 13 legs
created only an empty ~/.claude, which is no longer a Claude Code home.
Wherever no claude executable is installed, 9b-2 then finds no .claude.json
entry and 13e finds no agent config, and 9b-3, 9b-8 and the install.ps1 leg
stop exercising the Claude paths without saying so. The Linux test
container reproduces both failures. The Windows job never got that far,
because 8x-ii stops it in Phase 8. The fixtures now seed the .claude.json
user config through one helper, the same seed the unit tests use.

9b-1b pins the new rule end to end: where the empty-home control shows no
Claude Code, a home with only a bare ~/.claude gets no Claude config. A
venue that has a claude executable skips it, with the reason at the case.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-02 06:45:39 +02:00
Martin Vogel 96c3f41cf3 Merge pull request #2337 from DeusData/fix/issue-2003
fix(tests): ignore an inherited git repository environment (#2003)
2026-10-02 05:03:00 +02:00
Martin Vogel cb7d937638 Merge pull request #2249 from DeusData/distill/2109-ci-pins-and-sbom
ci: pin the noble-dependent runners, and attest the SBOM without the wrapper
2026-10-02 00:23:20 +02:00
Martin Vogel fc70534e81 Merge pull request #2425 from DeusData/fix/trace-path-qn-fallback-leak
fix(mcp): free the empty name-lookup result before trace_path's QN fallback
2026-10-02 00:06:01 +02:00
Martin Vogel 7ddbe66542 fix(routes): compose the Laravel 11+ withRouting api prefix into Route paths (#1146)
Laravel 11+ registers its route files in bootstrap/app.php through
Application::configure()->withRouting(web: ..., api: ..., apiPrefix: ...)
and mounts every file passed as `api:` under `apiPrefix` (default 'api').
That prefix lives in a different file than the routes, so per-file
extraction -- which already composes the in-file Route::prefix()->group()
chain (#952) -- minted `GET /users/me` for a route Laravel serves at
`GET /api/users/me`. The Route qualified_name is the join key for
cross-repo HTTP matching, so real callers of /api/... never linked, and an
api route could silently merge with a same-path web route.

Fix: a small Laravel mount resolver, src/pipeline/laravel_routing.c. For
each PHP file that registers a path-shaped route, both route passes (the
sequential calls pass and the parallel resolver) look up the nearest
ancestor bootstrap/app.php once, parse it with the PHP grammar, and, when
its withRouting(api: ...) names that file, prepend the apiPrefix to every
Route minted from it. Only source facts are used: an `api:` entry must be a
__DIR__ / dirname(__DIR__) concatenation or a base_path() call over a
string literal (single path or array), and a given apiPrefix must be a
string literal. A non-literal apiPrefix, positional arguments or a
`using:` callback leave the paths untouched, the `web:` file is never
prefixed, and nothing is inferred from file names. The lookup keys only on
the repo path and the file path, so full, incremental and delta runs
compose the same identity.

Proof (origin/main 1f9b4db1 vs this change, same machine):
- krayin/laravel-crm @03ebedd7: GET /user -> GET /api/user; the other
  four Route nodes are unchanged.
- filamentphp/demo @d5b618a1: GET /user -> GET /api/user.
- laravelio/laravel.io @24be4893: the api.php POST '/' inside
  prefix('articles') was merged into web.php's POST /articles node; it is
  now its own POST /api/articles (39 -> 40 Route nodes, every web route
  unchanged).
- Cross-repo: a TypeScript client calling axios.get('/api/users/me') and
  axios.post('/api/orders') against a Laravel 11 server:
  CROSS_HTTP_CALLS 0 -> 2.

Tests (edge_types_probe): default api prefix plus the composed
qualified_name, a custom multi-segment apiPrefix with the array form of
`api:`, the `web:` file stays unprefixed, a Laravel <= 10
RouteServiceProvider control stays as it is, a non-literal apiPrefix is
left alone, and the parallel resolver with the app in a monorepo
subdirectory. The four bug tests were RED 3x before the fix, pass with
it, and go RED again with only the composition reverted.

Fixes #1146

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-01 22:57:48 +02:00
Martin Vogel bedbc0ac00 Merge pull request #2345 from DeusData/fix/issue-2127
fix(pipeline): never bind an external Python import to a same-named project symbol (#2127)
2026-10-01 22:38:18 +02:00
Martin Vogel 7d4a12cb0a Merge pull request #2350 from DeusData/docs/cli-daemon-behavior
docs: one-shot cli commands use the shared daemon
2026-10-01 22:02:55 +02:00
Martin Vogel 922531a130 fix(csharp): refresh grammar for collection expressions in conditionals (#1748)
The vendored tree-sitter-c-sharp (88366631d598) predated upstream's C# 12
collection-expression support (tree-sitter-c-sharp #402, first released in
v0.23.4). A `[...]` literal could only be parsed as an
element_binding_expression, so `c ? [] : x`, wrapped `? []` ternaries and
both-branch collection conditionals had no valid parse. Error recovery then
ate the surrounding statement, the file was reported as parse_partial, and
nearby declarations could fall out of the graph.

Refresh the generated grammar bundle byte-for-byte from upstream tag v0.23.5
(cac6d5fb595f5811a076336682d5d595ac1c9e85). The ABI stays at 15, the MIT
LICENSE is byte-identical, and scanner.c is content-identical. The only new
node types are collection_expression, collection_element,
expression_element and spread_element. No node type is removed or renamed,
and the C# extractor and LSP depend on none of the old or new names.
MANIFEST.md and the vendored checksums are updated.

Add parse_coverage regressions for the reported variants plus a `? null`
control. A second test checks that calls inside a collection expression
(element and spread) are still extracted. A malformed-source guard checks
that broken C# is still flagged.

On dotnet/runtime (60108ba6), 4 files are no longer parse_partial and no
file becomes newly partial. Utf8JsonWriterTests.cs gets its class back, and
216 orphaned Functions are re-attached as Methods. Two files that were
already partial for unrelated unsupported syntax (the preview `closed`
modifier, `async` as an identifier) recover differently and lose 46 and
10 definitions.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-01 20:13:24 +02:00
Martin Vogel c61b3806bf Merge pull request #2449 from DeusData/fix/build-seams-and-cx-tmp
fix(build): make prod objects follow TEST_SEAMS; stop cx tmp leak
2026-10-01 19:19:26 +02:00
Martin Vogel 0bed0d372d Merge pull request #2327 from DeusData/fix/issue-1736
fix(grammar): accept a lone '&' in JSX strings and text (#1736)
2026-10-01 19:19:16 +02:00
Martin Vogel 28e24c6e51 Merge pull request #2324 from DeusData/fix/issue-1720
fix(install): adopt the Codex MCP table after Codex rewrites it (#1720)
2026-10-01 19:19:10 +02:00
Martin Vogel f67243ff0e Merge pull request #2320 from DeusData/fix/issue-1428
fix(extract): form Route nodes from NestJS @Controller/@Get decorators (#1428)
2026-10-01 19:19:04 +02:00
Martin Vogel ea7e01e91e Merge pull request #2445 from DeusData/fix/cypher-optional-join-overflow
fix(cypher): grow the OPTIONAL fallback buffer in the rel cross-join
2026-10-01 19:18:59 +02:00
Martin Vogel 77ea3bb95c Merge pull request #2407 from DeusData/fix/issue-1354
fix(ts-lsp): type imported class receivers for cross-file method calls (#1354)
2026-10-01 19:09:53 +02:00
Martin Vogel 3f0f49cd6c Merge pull request #2344 from DeusData/fix/issue-2134
fix(mcp): reuse the project that owns a root on unnamed re-index (#2134)
2026-10-01 19:09:46 +02:00