Two pairs of pull requests merged cleanly but left main unbuildable:
- #2447 added a route_mount parameter to emit_route_registration and
handle_route_registration, while #2464 added a new call to each with
the old argument list. The cross-language refused-route helper from
#2464 now takes route_mount and passes it on, and the pass_calls.c
call passes it too, as every other call site does. A route minted for
a refused binding therefore gets the same Laravel api mount as any
other route from that file.
- #2446 added a caller of is_project_db_file, which #2526 replaced with
cbm_is_project_index_db. The new caller uses the replacement, so the
owning-project lookup accepts the same file names as every other
project scan.
Verified: build/c/test-runner and the server binary build again; suites
edge_types_probe, mcp, cli and pipeline: 1081 passed, 4 platform skips.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
Use the shared exact-name database predicate for all five MCP cache
scans, including reindex root ownership. Preserve exclusions for the
two internal stores and cover listing, lookup, hints, and root reuse.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
Describe the current filters together when a structural search returns
no results, instead of blaming the label or name pattern.
Refs #1366
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
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>
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>
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>
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>
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>
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>
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>
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>
scripts/setup.sh and scripts/setup-windows.ps1 carried their own copy of
the release download: resolve the latest tag, fetch the archive, unpack it
into the install directory. Two implementations of the same step drifted
apart: the setup scripts did not follow the installers as those gained
their checks, their architecture selection and their staging directory.
Both setup scripts now fetch the installer from the origin and branch they
are themselves served from and hand the download and install over to it,
so there is exactly one implementation and the setup scripts behave like
the installers: the same conditions stop them with a non-zero exit before
anything is installed, setup-windows.ps1 selects the archive through the
installer's architecture detection instead of always amd64 (CBM_ARCH pins
it) and stages in a freshly created directory, and the file is pure ASCII
again. CBM_DOWNLOAD_URL, the
installers' download-base override, also moves the installer fetch so both
scripts can be driven against a local fixture.
Everything the setup scripts do beyond installing the binary is unchanged:
the --from-source / -FromSource builds, the interactive Claude Code
configuration, the PATH hint, the git-hook activation and the uninstall
notes.
tests/test_setup_scripts_contract.sh runs setup.sh against a loopback
fixture release built from a stub binary, in file mode and in curl | bash
mode, covers the cases in which the installer refuses, and pins the static
contract for setup-windows.ps1. It is Step 0z of scripts/test.sh.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>