Commit Graph
5212 Commits
Author SHA1 Message Date
Martin Vogel b461b9137f Merge pull request #2781 from DeusData/dependabot/github_actions/actions/upload-artifact-7.0.2
build(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2
2026-11-03 01:40:22 +01:00
Martin Vogel 8ae04f4bd1 Merge pull request #2424 from mvanhorn/fix/1642-python-constructor-calls-init
fix(python): resolve ClassName() calls to __init__
2026-11-03 01:17:11 +01:00
Martin Vogel fabc2b07f8 Merge pull request #1711 from benrfairless/feat/ruby-lsp-per-file
feat(lsp): add the Ruby per-file resolver
2026-11-03 00:57:38 +01:00
Martin Vogel 2921415586 Merge pull request #1430 from vitalNohj/fm/cbm-worktree-ignore-1
feat(config): add ignore_worktrees to skip linked git worktrees
2026-11-02 21:59:10 +01:00
Martin Vogel e87a9ff47e Merge origin/main into fix/1642-python-constructor-calls-init
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-02 18:51:12 +01:00
Martin Vogel b076877680 Merge branch 'main' into dependabot/github_actions/actions/upload-artifact-7.0.2 2026-11-02 18:25:19 +01:00
Martin Vogel a508219299 Merge origin/main into feat/ruby-lsp-per-file
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-02 18:09:59 +01:00
Martin Vogel 9c19b5dd9e Merge pull request #2245 from lorenzozanee/fix/termux-portable-guard
fix(install): reject unsupported Android portable installs
2026-11-02 18:08:10 +01:00
Martin Vogel afe57369ee Merge pull request #2879 from DeusData/dependabot/github_actions/actions/setup-python-7.1.0
build(deps): bump actions/setup-python from 7.0.0 to 7.1.0
2026-11-02 18:08:02 +01:00
Martin Vogel c80a256999 Merge pull request #2207 from AmirF194/fix/lifetime-lock-probe-drops-held-lock
fix(daemon): stop the lifetime-lock probe from dropping a held lock
2026-11-02 18:07:53 +01:00
Martin Vogel 7a9b1cb0d3 Merge pull request #2838 from halindrome/perf/index-worker-priority
perf(index): run supervised index workers at below-normal CPU priority
2026-11-02 18:07:41 +01:00
Martin Vogel f78620fe6c Merge pull request #2747 from petterip/feat/nextjs-app-router-routes
feat(extraction): route Next.js App Router handlers (#759)
2026-11-02 18:07:31 +01:00
Martin Vogel 141b25af7b fix(mcp): do not shadow cache_dir() in the ignore_worktrees reader
cppcheck 2.20 (the CI version) reports shadowFunction: the local
cache_dir in cbm_mcp_ignore_worktrees_runtime_enabled() shadows the
static cache_dir() helper in mcp.c. Rename the local to store_dir; no
behavior change.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-02 02:16:53 +01:00
Martin Vogel 1976986f4b Merge origin/main into fm/cbm-worktree-ignore-1
Brings the branch up to main a5b248f47. Eight files conflicted, each a
same-spot insertion where main and this branch added lines next to the
same anchor. Each resolves to the main version plus the change of this
branch:

- src/cli/cli.h, src/cli/cli.c: CBM_CONFIG_IGNORE_WORKTREES and its
  CONFIG_KEYS row next to the new doc_candidates key.
- src/mcp/mcp.c: the index_worktree schema property next to the new
  doc_candidates property.
- README.md, docs/CONFIGURATION.md: the ignore_worktrees line and table
  row next to the rewritten auto_watch entries and the new
  doc_candidates and watch_non_git rows.
- src/git/git_context.c: the env-isolation comment after the new debug
  stage marker, directly above cbm_popen_git.
- src/cli/hook_augment.c: the new SubagentStart cli_hint ahead of the
  parent-graph check of this branch.
- tests/test_mcp.c: both RUN_TEST blocks; main already includes
  str_util.h.

Per file, the lines changed against main equal the changes of this
branch against the merge-base.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-02 02:07:22 +01:00
Martin Vogel 04ed0240e9 docs(config): state how ignore_worktrees treats subdirectories
The review of 2026-10-01 asked for this to be a stated decision rather
than a side effect. Detection walks up from the given path to the
nearest .git entry, so a subdirectory of a linked worktree is treated
as that worktree: index_repository on it is refused, and a session root
or hook working directory inside it is handled the same way. The walk
stops at the first .git; outside any checkout it runs to the filesystem
root one directory at a time. None of it runs while the key is off.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-02 02:04:21 +01:00
Martin Vogel 77310d5f6f fix(cli): keep the hook default path untouched while ignore_worktrees is off
The lifecycle hook now reads ignore_worktrees first and does nothing
else for it while the key is off; the project lookup is then the one
the hook did before the key existed.

- cbm_mcp_ignore_worktrees_runtime_enabled() replaces
  cbm_mcp_server_attach_runtime_config(). It never attaches a store to
  the server, which may be the daemon session server. A server with a
  store answers from it. Otherwise the runtime store is opened only to
  read this key, and only when it already exists, so a hook event never
  creates _config.db.
- cwd canonicalization, the linked-worktree probe and the parent-graph
  check moved into ha_resolve_project_ignoring_worktrees(), which runs
  only when the key is on.

Test cli_hook_ignore_worktrees_default_off_does_no_worktree_work was red
on the previous head (a default-off event created _config.db). It also
pins, through a test-API counter, that neither an absent store nor a
store without the key reaches the worktree gate, and that the key on
reaches it once. mcp_ignore_worktrees_runtime_read_leaves_server_and_store_alone
replaces the test of the removed helper.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-02 02:04:15 +01:00
Martin Vogel faf25ee4fa fix(config): drop the fuzz-link and Cypher hunks from the worktree change
The review of 2026-10-01 asked to split these out of the ignore_worktrees
change. Neither belongs to it, and both are already on main in another
form, so this restores the three files to the branch merge-base:

- Makefile.cbm: main links cbm-fuzz with -fsanitize-link-c++-runtime.
- src/cypher/cypher.c and tests/test_cypher.c: main frees a partially
  parsed MATCH pattern since 70543ba82, with its own regression test
  cypher_parse_error_frees_partial_pattern.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-02 02:04:05 +01:00
Martin Vogel 3f12a3f24b Merge branch 'main' into dependabot/github_actions/actions/upload-artifact-7.0.2 2026-11-02 01:44:30 +01:00
Martin Vogel c04e322d61 Merge branch 'main' into dependabot/github_actions/actions/setup-python-7.1.0 2026-11-01 23:20:24 +01:00
Martin Vogel a5b248f472 Merge pull request #2261 from tamerbak/docs/contributor-check-prerequisites
Docs/contributor check prerequisites
2026-11-01 23:19:34 +01:00
Martin Vogel 7a7ecb7356 test(install): keep the Android guard test off the network
Point CBM_DOWNLOAD_URL, the documented download-base override in
install.sh, at a closed loopback port. If a curl stub were ever missed
on some leg, the download would then fail locally instead of fetching
a real release.

Check that the uname stub is the one PATH resolves before running
install.sh. Otherwise the test would quietly exercise the real host
instead of an Android one and prove nothing.

Refs #1202

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 23:02:46 +01:00
Martin Vogel 9f278b7ed3 Merge pull request #2880 from DeusData/dependabot/github_actions/ossf/scorecard-action-2.5.0
build(deps): bump ossf/scorecard-action from 2.4.4 to 2.5.0
2026-11-01 22:58:22 +01:00
Martin Vogel 79f674efe0 Merge origin/main into fix/termux-portable-guard
Brings the branch up to current main (it was 2061 commits behind) so
the new Step 0x2 runs inside the current scripts/test.sh. No conflicts.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 22:44:24 +01:00
Martin Vogel 8b2b0d769f fix(install): say that Termux is not a supported platform yet
The guard told users to build from source with scripts/build.sh in
Termux, which reads as a supported path. Source builds under Termux
still have open problems tracked in #1202, so the message now says
why the portable binary cannot run there and that a source build may
work but is not supported yet, pointing at #1202.

The test still matches Android/Termux in the new message.

Refs #1202

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 22:43:59 +01:00
Martin Vogel 1fc70c2024 test(install): run the Android guard test as Step 0x2 of scripts/test.sh
scripts/test.sh lists every shell contract test explicitly and does
not glob tests/, so an unlisted test never ran on any leg. Register
tests/test_install_android_guard.sh as Step 0x2, right after Step 0x,
in the same two-line shape as its neighbours.

Give the two PATH stubs (uname, curl) the same shebang every other
stub under tests/ uses, so they are proper executables on every leg
instead of relying on the shell fallback for files without one.

Refs #1202

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 22:43:58 +01:00
Martin Vogel 17415f6a38 test(install): rename the Android guard test to the test_*.sh convention
Every shell contract test under tests/ is named test_*.sh with
underscores. A pure rename, so history and blame follow the file.

Refs #1202

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 22:43:58 +01:00
Martin Vogel 9e0159e3e4 Merge origin/main into fix/1642-python-constructor-calls-init
Brings the branch up to date with main edc2301b. Main only changed
CI configuration since the branch base (CodeQL action, actions/attest
and msys2/setup-msys2 pins, Dependabot grouping); no conflicts.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 21:37:03 +01:00
Martin Vogel 616ba4111f Merge origin/main into perf/index-worker-priority
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 21:29:54 +01:00
Martin Vogel edc2301b02 Merge pull request #2503 from DeusData/dependabot/github_actions/msys2/setup-msys2-2.33.0
build(deps): bump msys2/setup-msys2 from 2.32.0 to 2.33.0
2026-11-01 21:29:38 +01:00
Martin Vogel 054719044a fix(python): bind ClassName() only to the class own __init__
A construction call now resolves to __init__ only when the called
class declares that __init__ itself. An inherited __init__ is no
longer followed: class B(A) without its own __init__ keeps the B()
call on the Class B, as it was before this branch.

Following the bases bound every subclass construction to the base
constructor. On a django index (fb113765) that made Model.__init__
a 583-caller hub (every model instantiation), bound IntegerField()
to Field.__init__ and HttpResponseForbidden() to
HttpResponse.__init__, and degraded 625 constructor call sites
versus main (457 fell back to textual resolution, 168 lost their
row; CALLS -161). With own __init__ only, 6016 sites move to the
class own __init__, 5468 stay on the Class, none fall back to a
textual strategy, and total CALLS is +4 versus main.

Tests: the same-file and cross-file inherited cases now pin the
Class target, and a new same-file subclass test at the LSP and the
graph level covers B(A) without __init__ (stays on B, never
A.__init__) and C(A) with its own __init__ (binds to C.__init__,
never the class C or A.__init__). The strategy inventory comment in
the repro suite is updated to match.

Refs #1642

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 21:29:22 +01:00
Matt Van Horn aa02511cc7 test(pipeline): expect Layout.__init__ for the #1548 constructor call
pipeline_python_init_function_shares_submodule_qn pinned the old Class
target for Layout("demo"). Layout defines __init__, so the constructor
call now lands on that method. The other tests that pin the contract
were moved in the previous commit; this one reached main afterwards.

Refs #1642

Signed-off-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-11-01 12:25:07 -08:00
Martin Vogel 360ab15cdb Merge origin/main into feat/ruby-lsp-per-file
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 21:18:25 +01:00
Martin Vogel 435baf6bd8 fix(ruby-lsp): survive allocation failure in the stdlib seed
The REG_* macros wrote through the return-type vector without checking
the allocation, and registered entries whose formatted QN came back NULL.
A shared ruby_seed_signature helper now leaves a failed vector out, so the
signature types as unknown (the fallback ruby_register_method already
uses), and REG_METHOD / REG_SMETHOD skip an entry whose formatted name is
NULL, since a NULL QN would reach strcmp in finalize and in every lookup.

rubylsp_stdlib_seed_survives_alloc_failure seeds a registry from an arena
that cannot allocate. Before: UBSan reported a store to a null pointer and
the run crashed with SEGV at ruby_stdlib_data.c:163. After: every
registered entry carries a name, the registry finalizes, and the Kernel
built-ins with literal names still resolve.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 21:17:28 +01:00
Martin Vogel 214a9ac843 fix(ruby-lsp): build constant paths in one pass
ruby_const_path recursed once per :: segment and re-formatted the growing
prefix at every level, so an A::B::C path cost one stack frame per segment
and quadratic bytes in the per-file arena. It now follows the scope fields
in a loop: one pass measures the segments, a second copies them right to
left into a single buffer. The result is the same string as before,
including a leading ::Foo and a scope that is not a constant path.

rubylsp_const_path_is_linear pins the arena bytes for an 800 vs a 1,600
segment path (before: 494,520 -> 1,660,520 bytes already at 400 -> 800
segments; after: 136,248 -> 150,848 at 800 -> 1,600) and the exact class
QN for a five-level path and for a rooted ::Top::Inner.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 21:17:28 +01:00
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 7e3024dbb8 Merge origin/main into fix/lifetime-lock-probe-drops-held-lock
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 20:51:22 +01:00
dependabot[bot] 1efa00eee3 build(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.1 to 7.0.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/043fb46d1a93c77aae656e7c1c64a875d1fc6a0a...cf430e030ddbb5b0abf93d22962f4752f3646cd9)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-01 19:21:49 +00:00
Martin Vogel 384e730744 Merge origin/main into docs/contributor-check-prerequisites
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 19:38:17 +01:00
dependabot[bot] 083bc94d5e build(deps): bump ossf/scorecard-action from 2.4.4 to 2.5.0
Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.4 to 2.5.0.
- [Release notes](https://github.com/ossf/scorecard-action/releases)
- [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md)
- [Commits](https://github.com/ossf/scorecard-action/compare/2d1146689b8cda280b9bc96326124645441f03bc...fa7117db83c52d787ae5a89f350999701505d78e)

---
updated-dependencies:
- dependency-name: ossf/scorecard-action
  dependency-version: 2.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-01 18:34:52 +00:00
dependabot[bot] 11f20c578b build(deps): bump actions/setup-python from 7.0.0 to 7.1.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/5fda3b95a4ea91299a34e894583c3862153e4b97...6d4fd22b20465ccc0f7354476588e8df7c9ca0e0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-01 18:34:44 +00:00
Martin Vogel 358501f6c7 Merge pull request #2727 from DeusData/chore/codeql-action-v4.39.0
ci: bump the CodeQL actions to v4.39.1 together and group their Dependabot updates
2026-11-01 19:30:11 +01:00
Martin Vogel df2b068532 Merge pull request #2507 from DeusData/dependabot/github_actions/actions/attest-4.2.2
build(deps): bump actions/attest from 4.1.0 to 4.2.2
2026-11-01 18:48:55 +01:00
Matt Van Horn 1b64c50c54 fix(python): resolve ClassName() calls to __init__
A Python construction call resolved to the Class node, so a user
__init__ never received a caller from ClassName(...) and the dead-code
view reported live constructors as unreferenced.

When the called name is the class itself, resolve it to the __init__
found on the class or, depth-first, its declared bases (the lookup
super().__init__() already uses), with a new lsp_constructor_init
strategy that joins the textual call site through its reason. Classes
with no user __init__ keep the Class target (lsp_constructor), as does
a builtins.* __init__. Calls through an instance (f = Foo(); f()) are
unchanged, since they dispatch to __call__.

This changes the documented Class-target contract for classes that
define __init__; the three tests that pinned it are updated.

Refs #1642

Signed-off-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-11-01 09:11:36 -08:00
dependabot[bot] 1f56c7d6bb build(deps): bump msys2/setup-msys2 from 2.32.0 to 2.33.0
Bumps [msys2/setup-msys2](https://github.com/msys2/setup-msys2) from 2.32.0 to 2.33.0.
- [Release notes](https://github.com/msys2/setup-msys2/releases)
- [Changelog](https://github.com/msys2/setup-msys2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/msys2/setup-msys2/compare/66cd2cce69caa17b53920067426061ca1de3a884...ec48f7c5447b3140e2b088413ae3a55687bccb6e)

---
updated-dependencies:
- dependency-name: msys2/setup-msys2
  dependency-version: 2.33.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-01 16:06:58 +00:00
Petteri Ponsimaa 6e54ac3ce7 Merge origin/main into feat/nextjs-app-router-routes
Main took semantic index version 12 for its Markdown section change, so
the Next.js App Router routes move to version 13 with their own history
entry. pipeline_nextjs_semantic_upgrade_issue759 now starts from a
version-12 index.

Signed-off-by: Petteri Ponsimaa <petterip@gmail.com>
2026-11-01 17:19:23 +02:00
Martin Vogel caad969154 ci: pin every CodeQL action to v4.39.1
Main already moved upload-sarif to v4.39.1 (#2779). Move init and analyze to
the same commit, 9b3254085494b55a0f7c4c2b3d2d52cc712ce370 (the commit the
v4.39.1 tag points to), so all three CodeQL actions run one version again.
The pin comment follows the form Dependabot wrote for upload-sarif. The
codeql-action Dependabot group added earlier on this branch keeps the three
in lockstep from here on.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 16:12:47 +01:00
Martin Vogel 45ceb80ccd Merge origin/main into chore/codeql-action-v4.39.0
Conflict in .github/workflows/scorecard.yml resolved to the main version:
main already pins upload-sarif to 9b3254085494b55a0f7c4c2b3d2d52cc712ce370
(v4.39.1, #2779), which supersedes this branch's v4.39.0 pin.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-11-01 16:12:13 +01:00
dependabot[bot] 54e079587d build(deps): bump actions/attest from 4.1.0 to 4.2.2
Bumps [actions/attest](https://github.com/actions/attest) from 4.1.0 to 4.2.2.
- [Release notes](https://github.com/actions/attest/releases)
- [Changelog](https://github.com/actions/attest/blob/main/RELEASE.md)
- [Commits](https://github.com/actions/attest/compare/59d89421af93a897026c735860bf21b6eb4f7b26...1e69f48acb82d1966a394da916b4c1698aa569d6)

---
updated-dependencies:
- dependency-name: actions/attest
  dependency-version: 4.2.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-01 15:09:38 +00:00
Martin Vogel 6c0ce230ee Merge pull request #2779 from DeusData/dependabot/github_actions/github/codeql-action/upload-sarif-4.39.1
build(deps): Bump github/codeql-action/upload-sarif from 4.38.1 to 4.39.1
2026-11-01 16:08:06 +01:00
Martin Vogel 587f134e5c Merge pull request #2385 from HazielMagallanes/fix/opencode-v2-setup-hooks
fix(cli): register OpenCode 2 hooks via the setup context
2026-11-01 14:27:30 +01:00