merge: reconcile upstream through baf19067
fork/consolidated now contains upstream main through baf19067 (three commits): a C++ data member written through a chain is found in a base class (#2628), the Windows daemon test cleans up its detached process (#2629), and a member reference through an import binding (LIST.includes(x) after import { LIST } from './constants') is parked under its module and relinked on sync (#2630).
Conflicts. Four files conflicted, because upstream wrote its fixes against the regex-based JavaScript resolver and the fork reads the kernel's binding rows. No regex came back.
| File | Resolution |
|---|---|
src/db/migrations.ts | Upstream's version-16 member-tail index is the fork's version 22 (the fork already uses 16 to 21 for its own migrations). CURRENT_SCHEMA_VERSION is 22, with the same missing-column guard as the fork's version 21. |
src/index.ts | Fork's re-export file kept. Upstream's comment on the sync retry went to the same place in src/codegraph.ts. |
src/resolution/import-resolver.ts | Upstream's importBindingTail (member receiver parking) on top of getImportMappings; the fork's isExternalImport(…, ref.filePath) already covers the nearest-alias case upstream added inline. |
src/resolution/name-matcher.ts | Stays deleted. #2628 needed no kernel change: cpp_member_written_in already searches supertypes, and cpp-member-chain-base-members.test.ts passes unchanged. |
One behavior difference from upstream. A call on an imported constant (LIST.includes(x), store.get(k)) is parked and retried the same way, but the fork's native resolver links a call through an import only to a function, method, class or component (or a store through getState), so it stays unlinked after a sync and after a full index. Upstream links it to the constant. Seven link expectations in sync-import-member-retry.test.ts are changed to say so (the parking and sync-equals-full-index assertions are upstream's as written). The CHANGELOG has a fork note and the README one sentence. Whether to adopt upstream's constant links is a resolution-policy decision that needs eval:precision on JS/TS corpora, and is not made here.
Checks, on this head. build:kernel with clippy -D warnings, golden dumps (no .dump diff), tsc --noEmit, check:agent-docs, readme-sync all exit 0; full suite 749 files, 9,286 passed, 40 skipped. eval:precision was not run: no Rust file changed, and the only resolution change is which tail a failed reference is parked under, which changes no edges.
README rows checked. Merge point (now baf19067); the JavaScript/TypeScript member-call paragraph (one sentence added); "About this fork" feature table, name-resolution row, sync-retry sentence, 2026-10-15 benchmark paragraph (historical, no number moves). No docs-site page names the merge point.
The merge commit keeps upstream's baf19067 as a parent, so land it as a merge commit. Promoting the deployed build is a separate step.
Summary by cubic
Merges upstream main through baf19067 into fork/consolidated, bringing in three fixes: C++ calls on data members inherited through a chain now link to the member's class, the Windows daemon rebuild test no longer leaves a suspended detached process behind, and a member reference through an import binding (LIST.includes(x) after import { LIST } from './constants') is parked under its module and relinked when that module changes.
Conflict resolutions
- Upstream's member-tail index becomes schema version 22; the fork's own migrations already use 16–21.
- Upstream's
name-matcher.tsstays deleted; the kernel's existing C++ member lookup already searches base classes.
Behavior difference
- A call on an imported constant stays unlinked in the fork after a sync and after a full index, because the native resolver links calls through imports only to functions, methods, classes, components, or a store's
getState. - Seven link expectations in
sync-import-member-retry.test.tschange to reflect that; parking and sync-equals-full-index assertions match upstream.