Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
260 commits
Select commit Hold shift + click to select a range
99209b6
fix(resolution): a Python call reaches a method through its receiver,…
colbymchenry Sep 30, 2026
8987be4
fix(resolution): a bare Java call reaches its class, supertypes or st…
colbymchenry Sep 30, 2026
1ef1eb8
fix(resolution): Vue, Svelte and Astro calls follow the JS/TS rules (…
colbymchenry Sep 30, 2026
92e14ed
fix(extraction): a file-based router reads only its own app in a mono…
colbymchenry Sep 30, 2026
54a1698
fix(vue-router): admin-template route tables, children and layouts; N…
colbymchenry Sep 30, 2026
b62da73
fix(sveltekit): route names drop (group) folders and parameter matche…
colbymchenry Sep 30, 2026
4423891
fix(react-router): v5 <Redirect to> and styled(Link) wrappers navigat…
colbymchenry Sep 30, 2026
cec041d
fix(angular): Nx workspaces, barrels, class-constant paths and root-r…
colbymchenry Sep 30, 2026
6774446
fix(resolution): Expo module bindings, imported receivers, TS type-on…
colbymchenry Sep 30, 2026
72a9346
fix(expo-router): +api files are endpoints; the nearest router manife…
colbymchenry Sep 30, 2026
a4f9820
fix(resolution): a super call in an override is not a self-call (#2136)
colbymchenry Sep 30, 2026
6f798dc
fix(react-native): Paper requireNativeComponent views reach native; J…
colbymchenry Sep 30, 2026
6a02dca
fix(react-native): event names held in constants join the native↔JS c…
colbymchenry Sep 30, 2026
66d5dc3
fix(resolution): fuzzy matching is exact-case outside case-insensitiv…
colbymchenry Sep 30, 2026
a3d675e
fix(vue): Options API methods, computed, watchers and hooks are symbo…
colbymchenry Sep 30, 2026
ca3bb44
fix(resolution): case-insensitive names pass the prefilter; PHP `=> f…
colbymchenry Sep 30, 2026
dcbbd16
fix(php): $this / self / static / parent calls stay in the class hier…
colbymchenry Sep 30, 2026
7ac8eef
fix(lua): a local is invisible outside its chunk (#2143)
colbymchenry Sep 30, 2026
422db18
fix(r): a test file's top-level variables stay in that file (#2144)
colbymchenry Sep 30, 2026
0ff11b3
fix(dart): a bare call stays in the class hierarchy (#2145)
colbymchenry Sep 30, 2026
75976f9
fix(kotlin): top-level functions resolve only where they're visible (…
colbymchenry Sep 30, 2026
df761e4
fix(ruby): a method reached by name alone must be in reach (#2147)
colbymchenry Sep 30, 2026
bd97414
fix(cfml): a component method reached by name alone must be in reach …
colbymchenry Sep 30, 2026
889b6a3
fix(vbnet): a member access resolves through what the line names (#2149)
colbymchenry Sep 30, 2026
b238e24
fix(objc): a message reached by name alone must be in reach (#2150)
colbymchenry Sep 30, 2026
6eb08d6
fix(csharp): a bare name reaches only members in scope (#2151)
colbymchenry Sep 30, 2026
e6527a8
fix(php): an untyped receiver keeps a unique method only when named f…
colbymchenry Sep 30, 2026
be91a31
fix(lua): a library call is never the one project method of that name…
colbymchenry Sep 30, 2026
11cc3d9
fix(flask): add_url_rule and view_func registrations are routes (#2154)
colbymchenry Sep 30, 2026
1102089
fix(rails): routes are read with their namespaces, scopes and nesting…
colbymchenry Sep 30, 2026
a5b0160
fix(play): a Play project in a subdirectory is still Play (#2156)
colbymchenry Sep 30, 2026
3151d5c
fix(vapor): closure, webSocket and on(…) routes are routes (#2157)
colbymchenry Sep 30, 2026
9269f92
fix(aspnet): FastEndpoints routes, and minimal API paths get a leadin…
colbymchenry Sep 30, 2026
5ba3674
fix(resolution): a framework-resolved edge names its resolver (#2159)
colbymchenry Sep 30, 2026
7aa124c
fix(scala): a bare call reached by name alone must be in reach (#2160)
colbymchenry Sep 30, 2026
2d1b644
fix(extraction): Flow-typed JavaScript is read as TSX (#2161)
colbymchenry Sep 30, 2026
d03e4db
fix(resolution): an unexported ES module binding is not reachable cro…
colbymchenry Sep 30, 2026
cf449fd
fix(resolution): a name destructured from a composable reaches what i…
colbymchenry Sep 30, 2026
37bcd5c
fix(react-router): nested, lazy and constant routes; per-app tsconfig…
colbymchenry Sep 30, 2026
05740b5
fix(resolution): a call on an outside type is not a project method (#…
colbymchenry Sep 30, 2026
715c62b
fix(rust,go): read a call's shape before guessing its method (#2167)
colbymchenry Sep 30, 2026
b7b2a44
fix(kotlin): split primary constructors keep their class; std chain n…
colbymchenry Sep 30, 2026
791ae39
fix(resolution): a receiver declared with an outside type calls that …
colbymchenry Sep 30, 2026
a39fd14
fix(swift): read a call's shape before reaching a member by name (#2170)
colbymchenry Sep 30, 2026
f9530d7
fix(resolution): a call through a declared member calls that member's…
colbymchenry Sep 30, 2026
2e2b98c
fix(kotlin): a bare call reaches only a member in reach (#2172)
colbymchenry Sep 30, 2026
0b74e94
fix(kotlin): no automatic semicolon before a same-line infix e-word (…
colbymchenry Sep 30, 2026
c6491ff
fix(kotlin): record infix calls as calls (#2174)
colbymchenry Sep 30, 2026
c0a38a8
fix(resolution): a receiver-name guess is never a dispatched handler …
colbymchenry Sep 30, 2026
5844eb8
fix(cpp): a qualified name reaches a declaration in a macro-opened na…
colbymchenry Sep 30, 2026
4849802
fix(resolution): calls on a library's types and modules stay the libr…
colbymchenry Sep 30, 2026
2d0d120
fix(resolution): Solidity bare calls stay in the inheritance chain; E…
colbymchenry Sep 30, 2026
de74c05
fix(objc): a message to super reaches the superclass (#2179)
colbymchenry Sep 30, 2026
aa0c73c
fix(resolution): a call through a class name reaches the class method…
colbymchenry Sep 30, 2026
5a2b560
perf(resolution): read a class's member lines once for member-type in…
colbymchenry Sep 30, 2026
fcea022
fix(kotlin): rewrite syntax newer than the grammar before parsing (#2…
colbymchenry Sep 30, 2026
2646b93
test(ui-server): hold the engine's busiest symbol to the row cap, not…
colbymchenry Sep 30, 2026
5c3aa92
fix(cpp): keep classes written around macros and mid-declaration cond…
colbymchenry Sep 30, 2026
1f64e15
fix(react-router): read links through a route-config object's getHref…
colbymchenry Sep 30, 2026
60f1db0
fix(lua): follow a local alias to the function it names (#2188)
colbymchenry Sep 30, 2026
e77ca83
fix(js): resolve calls through CommonJS require bindings (#2189)
colbymchenry Sep 30, 2026
7c1c9a3
fix(ts): `export * as ns` exports the namespace, not every member (#2…
colbymchenry Sep 30, 2026
8410db4
fix(scala): block-local vals, package imports and package objects (#2…
colbymchenry Sep 30, 2026
ad77e5f
fix(java,kotlin): extract enum constants' own bodies (#2194)
colbymchenry Sep 30, 2026
81ce7e5
fix(java): an import from outside the project owns its name (#2195)
colbymchenry Sep 30, 2026
da1312e
fix(kotlin): read Kotlin imports; an outside import owns its name (#2…
colbymchenry Sep 30, 2026
85aad42
fix(resolution): a test double is never the one-method guess (#2197)
colbymchenry Sep 30, 2026
71202c3
fix(python): a bare call to a locally bound name is that value (#2198)
colbymchenry Sep 30, 2026
7493fde
fix(scala): a chain link is never an object named like the member (#2…
colbymchenry Sep 30, 2026
7a11864
fix(routes): inline handler calls keep their receivers (#2200)
colbymchenry Sep 30, 2026
116feb4
fix(cpp): pick the overload a macro-namespaced call's arguments fit (…
colbymchenry Sep 30, 2026
b55836d
fix(lua): a bare call is never a table method; Lua's globals are Lua'…
colbymchenry Sep 30, 2026
4c381ae
fix(swift): a call on a constructed value is that type's member (#2203)
colbymchenry Sep 30, 2026
e7be363
fix(js): no call resolves by name into a minified bundle (#2204)
colbymchenry Sep 30, 2026
a329df8
fix(swift): a call on a typed property is a member of its type (#2205)
colbymchenry Sep 30, 2026
fc73204
fix(kotlin): a DSL lambda runs on its own receiver (#2206)
colbymchenry Sep 30, 2026
eb1452b
fix(dart): core method names on untyped receivers are the core type's…
colbymchenry Sep 30, 2026
b8f2bd5
test(ui-server): time the busiest symbol as the best of five requests…
colbymchenry Sep 30, 2026
de9f346
fix(resolution): production code never names a test suite's symbol (#…
colbymchenry Sep 30, 2026
d7cdb0c
fix(vue): the Vue resolver only resolves a Vue app's scripts (#2210)
colbymchenry Sep 30, 2026
5c01f01
fix(react): the React resolver only resolves a script's references (#…
colbymchenry Sep 30, 2026
c20283e
fix(resolution): a call to an overload of the calling method reaches …
colbymchenry Sep 30, 2026
5f1a635
fix(resolution): any call reaches the overload its arguments fit (#2213)
colbymchenry Sep 30, 2026
fa8d728
fix(rust): a bare name is in scope only through its module or a use (…
colbymchenry Sep 30, 2026
a8b578f
fix(csharp): a bare type name is one its namespaces can see (#2216)
colbymchenry Sep 30, 2026
fa43e25
fix(scala): a symbolic name in a type is a type, never an operator (#…
colbymchenry Sep 30, 2026
e62032e
fix(python): a member value through an untyped receiver is a method o…
colbymchenry Sep 30, 2026
0312333
fix(resolution): a name passed as a value is what is in scope where i…
colbymchenry Sep 30, 2026
ff75a6c
fix(csharp): namespaces, usings and nested types follow the language'…
colbymchenry Sep 30, 2026
ff190b3
fix(resolution): a method handing its call on to another object is no…
colbymchenry Oct 1, 2026
d6f6864
fix(spring): name heuristics start from the reference's own file and …
colbymchenry Oct 1, 2026
ca1eba9
fix(resolution): a bare-recorded call on another expression's value i…
colbymchenry Oct 1, 2026
7365427
fix(rust): framework name heuristics never reach a function-local ite…
colbymchenry Oct 1, 2026
1799390
fix(frameworks): name heuristics pick only what the reference can see…
colbymchenry Oct 1, 2026
83dac15
fix(js): a name the calling function binds is its local (#2226)
colbymchenry Oct 1, 2026
3e6252f
fix(svelte,vue): a component's instance script declarations are its o…
colbymchenry Oct 1, 2026
92f141f
fix(python): a pytest test's parameter is the class its fixture retur…
colbymchenry Oct 1, 2026
b281819
fix(resolution): a type never inherits from itself (#2229)
colbymchenry Oct 1, 2026
3878123
fix(scala): a package object's member is in scope only in its package…
colbymchenry Oct 1, 2026
312b901
fix(rust): Self::X is the impl's associated item, V::X no struct (#2231)
colbymchenry Oct 1, 2026
27da256
fix(kotlin): a Gradle script's bare call is never a project class's m…
colbymchenry Oct 1, 2026
32f681a
fix(go): a name written through an outside package is never a project…
colbymchenry Oct 1, 2026
d9d457d
fix(c): a C call is never a C++ method (#2234)
colbymchenry Oct 1, 2026
3df191b
fix(php): a bare class name is its namespace's class or the imported …
colbymchenry Oct 1, 2026
ef62f02
fix(java): a bare type name is a type in reach by package, import or …
colbymchenry Oct 1, 2026
8651adb
fix(dart): an unnamed extension is not its on-type and applies only i…
colbymchenry Oct 1, 2026
31c5153
fix(swift): an overloaded call reaches the overload its argument labe…
colbymchenry Oct 1, 2026
a925fa0
fix(r): a call never reaches a data binding that shadows a base funct…
colbymchenry Oct 1, 2026
f976a05
fix(react): hook and context heuristics pick only the file's own in J…
colbymchenry Oct 1, 2026
a5da8da
fix(solidity): a call reaches the overload its argument count fits (#…
colbymchenry Oct 1, 2026
8ca4433
fix(objc,swift): a class conforming to its namesake protocol implemen…
colbymchenry Oct 1, 2026
3343646
fix(express): name patterns pick only the calling file's own declarat…
colbymchenry Oct 1, 2026
000c986
fix(express): a middleware candidate is a declaration, never an impor…
colbymchenry Oct 1, 2026
b2afa75
fix(astro): the component name heuristic applies to .astro files only…
colbymchenry Oct 1, 2026
c38aa9c
fix(nestjs): the provider convention stays in the reference's feature…
colbymchenry Oct 1, 2026
6d8802c
fix(python): an imported name follows the package's re-exports to its…
colbymchenry Oct 1, 2026
34ede4d
fix(python): a module member follows the package's re-exports too (#2…
colbymchenry Oct 1, 2026
d45edca
fix(express): a function-expression handler is the route's body, like…
colbymchenry Oct 1, 2026
81e08b7
fix(viewer): pages that went blank — repeated ids, and Steps on a fun…
colbymchenry Oct 1, 2026
95f6f0f
fix(viewer): a directed Flow looks up both ends by their exact names …
colbymchenry Oct 1, 2026
c4babfc
fix(js): a CommonJS require and a module path import the file they na…
colbymchenry Oct 1, 2026
d6a2bdb
fix(sfc): a Vue/Svelte/Astro component owns its script (#2268)
colbymchenry Oct 1, 2026
c04cb5c
fix(viewer): the Map opens on a picture, not a single box (#2270)
colbymchenry Oct 1, 2026
c0d3285
fix(rails): only:/except: are read as %i[], %w(), a string or :only =…
colbymchenry Oct 1, 2026
41cfc83
fix(viewer): highlighting runs in a worker the server can stop (#2266)
colbymchenry Oct 1, 2026
e12f5bb
fix(nuxt, astro): a file-routed page is bound to its component (#2267)
colbymchenry Oct 1, 2026
104b8de
fix(laravel): a string controller resolves without a Controller suffi…
colbymchenry Oct 1, 2026
f416357
fix(cobol): a file ending inside the sequence area no longer hangs th…
colbymchenry Oct 1, 2026
911fcf6
fix(vapor): a closure route's calls are the route's (#2273)
colbymchenry Oct 1, 2026
ec738ec
fix(viewer): a Steps picture with nothing past its anchor says why (#…
colbymchenry Oct 1, 2026
404e782
fix(windows): hide the git calls that flash console windows (#2094) (…
colbymchenry Oct 2, 2026
96ba880
fix(prompt-hook): skip Claude Code <agent-message> subagent hand-back…
colbymchenry Oct 2, 2026
49248e2
fix(mcp): answer server/discover locally in the stdio proxy (#2084) (…
colbymchenry Oct 2, 2026
637fb0f
fix(mcp): release an idle explicit project and its writer lock (#2087…
colbymchenry Oct 2, 2026
fdc7754
fix(mcp): return status and stale refusals as text only (#2088) (#2284)
colbymchenry Oct 2, 2026
5271c89
fix(php): a class written with a namespace in its name resolves to th…
colbymchenry Oct 2, 2026
455175d
fix(mcp): a projectPath in a nested repo the ancestor index leaves ou…
colbymchenry Oct 2, 2026
e28ac71
fix(sync): same-named symbols keep their own cross-file callers acros…
colbymchenry Oct 2, 2026
a5184ed
fix(pascal): Delphi .inc include files are indexed as Pascal, not PHP…
colbymchenry Oct 2, 2026
a4bd890
fix(python): a call on self is never resolved through a same-named im…
colbymchenry Oct 2, 2026
f838c5a
fix(resolution): resolve method values on untyped Python module globa…
colbymchenry Oct 2, 2026
2ff7a99
fix(cpp): bound the macro-visibility include walk (#2127) (#2292)
colbymchenry Oct 2, 2026
7c01910
fix(cfml): tag-based calls, wrapped functions and <cfinterface> are i…
colbymchenry Oct 2, 2026
45a680d
fix(mcp): one daemon per project however its root is cased on Windows…
colbymchenry Oct 2, 2026
e7389b2
fix(mcp): a session serving in-process hands the project back to the …
colbymchenry Oct 2, 2026
7bbc1fb
fix(tests): the test suite no longer writes to the developer's real h…
colbymchenry Oct 2, 2026
273e5cd
fix(upgrade): a Windows upgrade no longer breaks the install while Co…
colbymchenry Oct 2, 2026
8abebda
test(windows): two #1910 tests no longer time out on Windows (#2298)
colbymchenry Oct 2, 2026
91b9bba
fix(extraction): never terminate a parse worker while it is loading g…
colbymchenry Oct 2, 2026
e0f9c95
fix(resolution): a busy machine doesn't boot the resolver pool for a …
colbymchenry Oct 2, 2026
9d4e805
test(windows): daemon-pid-reuse cleanup retries a still-held temp dir…
colbymchenry Oct 2, 2026
3d86bcc
fix(windows): the query pool never terminates a worker still starting…
colbymchenry Oct 2, 2026
70fe0ec
fix(windows): helper threads never end mid-start or with GC marking i…
colbymchenry Oct 2, 2026
2965b7a
docs(changelog): ready [Unreleased] for 1.6.2; release verify waits u…
colbymchenry Oct 3, 2026
ad60dcc
test(windows): the windowsHide guard fails closed on spawns it can't …
colbymchenry Oct 3, 2026
dbb3d63
fix(mcp): wait for a stopping daemon, and for the proxy's fallback en…
colbymchenry Oct 3, 2026
2171906
fix(telemetry): recover from the D1 10 GB outage; dashboard starts on…
colbymchenry Oct 3, 2026
0f0af7b
release: 1.6.2 (#2318)
colbymchenry Oct 3, 2026
6560052
docs(changelog): promote [Unreleased] into [1.6.2]
github-actions[bot] Oct 3, 2026
489b474
fix(vbnet,csharp): index every Structure member; walk property bodies…
colbymchenry Oct 5, 2026
511d86e
fix(mcp): replace a daemon left running by an older install (#2335) (…
colbymchenry Oct 5, 2026
dea076f
fix(mcp,extraction): exit a daemon whose install changed; never store…
colbymchenry Oct 5, 2026
0c7d0f7
perf(resolution): remove the Python indexing regressions since 1.6.2 …
colbymchenry Oct 5, 2026
355afc7
fix(csharp): walk field and property initializers; a constant never n…
colbymchenry Oct 5, 2026
c994414
fix(vbnet): resolve receiver calls by declared type; guard .NET names…
colbymchenry Oct 5, 2026
26e8488
fix(windows): the kernel-parity sweep loads the engine as file:// URL…
colbymchenry Oct 5, 2026
69ee3b9
fix(ui): fall back past a port Windows refuses with EACCES, and say w…
colbymchenry Oct 5, 2026
6c61dd7
fix(vbnet): link Shared fields and properties read through their clas…
colbymchenry Oct 5, 2026
a192df4
fix(telemetry): count late index uploads, treat usage as live ingest,…
colbymchenry Oct 5, 2026
8998697
fix(vue,ts): link calls in Vue templates and in top-level destructuri…
colbymchenry Oct 5, 2026
1b56cb1
fix(explore): find COBOL copybooks by name, with every include site (…
colbymchenry Oct 5, 2026
9f69e47
fix(dart): link getter reads, enum-extension members and more type po…
colbymchenry Oct 5, 2026
deac771
fix(go): resolve unexported receivers and nested modules within the r…
colbymchenry Oct 5, 2026
7210d2f
perf(resolution): remove the JS indexing regressions since 1.6.2; the…
colbymchenry Oct 5, 2026
ed1a89f
fix(rust): a variant path references the enum that declares it (#2328…
colbymchenry Oct 5, 2026
023fc31
fix(axum,actix): link a route to a handler written below its call (#2…
colbymchenry Oct 5, 2026
f40db4b
fix(js,ts): index the functions in every named object literal, not on…
colbymchenry Oct 5, 2026
aeb8f95
fix(kernel): find a store exported on a later line in CRLF TS/JS file…
colbymchenry Oct 6, 2026
fe7542b
fix(vbnet): index names that begin with a keyword (SharedCache, Dimen…
colbymchenry Oct 6, 2026
5b73d0f
fix(js,ts): find a store exported on a later line when its name conta…
colbymchenry Oct 6, 2026
6421644
fix(dart): link calls in top-level and field initializers (#2367)
colbymchenry Oct 6, 2026
b7e05f3
fix(dart): link a chained call only through its receiver's declared t…
colbymchenry Oct 6, 2026
5a11cd7
fix(vbnet): link fields and properties read or written through a valu…
colbymchenry Oct 6, 2026
0571286
fix(js,ts): link calls through an import whose name contains $ (#2378)
colbymchenry Oct 6, 2026
4d6168a
fix(dart): a bare call to a parameter or local links nothing (#2379)
colbymchenry Oct 6, 2026
652c36b
fix(dart): index const constructors and redirecting factories; a call…
colbymchenry Oct 6, 2026
3f96f80
fix(dart): link generic calls the parser reads as two comparisons (#2…
colbymchenry Oct 6, 2026
1b752de
fix(dart): a member with no body keeps its dartdoc and annotations (#…
colbymchenry Oct 6, 2026
d500e58
fix(dart): link a call chained on a generic lookup like BlocProvider.…
colbymchenry Oct 6, 2026
5f5b8db
fix(js,ts): find a store exported by an export { } list when its name…
colbymchenry Oct 6, 2026
249d9a8
fix(dart): a comment inside a member chain no longer loses a call or …
colbymchenry Oct 6, 2026
0c860c0
fix(dart): a bare call or type name reaches only what its library can…
colbymchenry Oct 6, 2026
9924684
fix(dart): a member keeps the dartdoc written above its annotations (…
colbymchenry Oct 6, 2026
631df01
fix(dart): an import or export links the file its URI names, not a na…
colbymchenry Oct 6, 2026
d2fb323
fix(dart): an annotation links the constant or constructor it names, …
colbymchenry Oct 6, 2026
837a186
fix(dart): a call through an import prefix reaches only what that imp…
colbymchenry Oct 6, 2026
83f54a1
fix(dart): a library links the files its part directives name (#2391)
colbymchenry Oct 6, 2026
3f5a9e2
fix(sync): an import links the file it names when that file appears l…
colbymchenry Oct 6, 2026
0a670dc
fix(liquid): JSON under templates/ or sections/ is Liquid only inside…
colbymchenry Oct 6, 2026
ac1f430
fix(c,cpp): a pointer, array or function member is not a supertype (#…
colbymchenry Oct 6, 2026
c513f14
fix(frameworks): detection reads an app's package.json three or more …
colbymchenry Oct 6, 2026
f797b8c
fix(liquid): a Shopify theme's sections and snippets resolve only ins…
colbymchenry Oct 7, 2026
24501fa
fix(go): an interface links the interfaces it embeds (#2397)
colbymchenry Oct 7, 2026
9a274a4
fix(angular): a binding, interpolation or control-flow block links th…
colbymchenry Oct 7, 2026
02d22ae
fix(cpp): a receiver declared through a typedef or using alias calls …
colbymchenry Oct 7, 2026
9a515c3
fix(dead-code): a method a framework calls by decorator or by name is…
colbymchenry Oct 7, 2026
787f75f
fix(go): a type written bare links its own package's, not a namesake …
colbymchenry Oct 7, 2026
dd70646
fix(react-router): read route tables another file hands the router (#…
colbymchenry Oct 7, 2026
fe95183
fix(go): satisfying an interface counts the methods embedding brings …
colbymchenry Oct 7, 2026
4040eab
fix(cpp): a base class links to the class C++ name lookup finds, not …
colbymchenry Oct 7, 2026
5ace306
fix(kernel): a Go value like `wm.new` or `raft.None` keeps its functi…
colbymchenry Oct 7, 2026
31c3328
fix(sync): a Liquid section or snippet reference links its file when …
colbymchenry Oct 7, 2026
73797bf
test(sync): compare synced graphs with an index rebuilt from scratch …
colbymchenry Oct 7, 2026
d8a7f86
fix(go): an unaliased import is also known by the name goimports assu…
colbymchenry Oct 7, 2026
e0bbb66
fix(dead-code): a type that declare module or declare global merges o…
colbymchenry Oct 7, 2026
22a7ba8
fix(c,cpp): a file named like a test is visible to the code that incl…
colbymchenry Oct 7, 2026
c54b726
fix(react-router): a JSX index route is the page at its parent's addr…
colbymchenry Oct 7, 2026
8f0766c
fix(resolution): a large minified JS bundle no longer stalls resolvin…
colbymchenry Oct 7, 2026
855eca2
fix(go): a call through an interface reaches a method the struct gets…
colbymchenry Oct 7, 2026
388b252
fix(sync): a route links the module it lazily loads when the module a…
colbymchenry Oct 7, 2026
f261fda
fix(js,ts): `import { default as X }` is the module's default import …
colbymchenry Oct 7, 2026
19f91e2
fix(frameworks): a framework resolves only references written in its …
colbymchenry Oct 7, 2026
9d07864
fix(cpp): a class keeps its namespaces and enclosing class past code …
colbymchenry Oct 7, 2026
3bf6b8f
fix(go): a type in a signature or composite literal links a type, nev…
colbymchenry Oct 7, 2026
d348d30
fix(sync): a navigation call links its route when the route appears l…
colbymchenry Oct 7, 2026
2f2afea
fix(go): a defined type implements the interfaces its methods satisfy…
colbymchenry Oct 7, 2026
61f8b09
fix(cpp): a receiver declared as a std or other outside type with a l…
colbymchenry Oct 7, 2026
ed199e6
fix(go): a type alias `type A = B` is indexed and links to the type i…
colbymchenry Oct 7, 2026
4731149
fix(react): a type argument or a name the component binds itself rend…
colbymchenry Oct 7, 2026
883504d
fix(go): a call on an embedded struct's method does not reach the emb…
colbymchenry Oct 7, 2026
cdb994b
fix(cpp): a class keeps its members past attribute macros the parser …
colbymchenry Oct 7, 2026
9a1d4bd
fix(js,ts): `require('./x').default` reaches an ES module's default e…
colbymchenry Oct 7, 2026
3de5bef
fix(go): a call through a type assertion reaches the asserted type's …
colbymchenry Oct 7, 2026
1fb8691
fix(c,cpp): a file named like a Google unittest, foo_unittest.cc, is …
colbymchenry Oct 7, 2026
c051ea0
fix(go): a dotted call is written through its own receiver, and a loc…
colbymchenry Oct 7, 2026
2c807f5
fix(js,ts): a catch-all or node_modules path alias no longer makes pa…
colbymchenry Oct 7, 2026
ca90841
perf(resolution): read a bare-recorded call's receiver on its own lin…
colbymchenry Oct 7, 2026
51000e3
fix(go): a defined type links the types it is defined from (#2441)
colbymchenry Oct 7, 2026
16344af
fix(react-router): a lazy route links the page a barrel module forwar…
colbymchenry Oct 7, 2026
ce78b63
fix(go): implementing an interface needs matching parameter and resul…
colbymchenry Oct 7, 2026
cdf0681
fix(cpp): a receiver declared with nested template arguments calls it…
colbymchenry Oct 7, 2026
462def1
fix(explore): a Flow through an interface goes through the implementa…
colbymchenry Oct 7, 2026
235387e
fix(c,cpp): a struct, class, union or enum defined in a variable decl…
colbymchenry Oct 7, 2026
7a79654
fix(cpp): a call written from the global scope links the declaration …
colbymchenry Oct 7, 2026
78f5c88
fix(react): a typed styled component is a component, not a constant (…
colbymchenry Oct 7, 2026
e47cb25
fix(sync): a reference through an import binding links its module whe…
colbymchenry Oct 7, 2026
b635dd4
fix(go): a type declared on its own keeps its doc comment (#2438)
colbymchenry Oct 7, 2026
5a72489
merge: sync 257 upstream commits with Pinable schema compatibility
PinableAgents Oct 9, 2026
b0b5e64
fix(i18n): localize the new upstream callers and callees link
PinableAgents Oct 9, 2026
0c460b2
fix(workspace): reject non-directory ancestors on Windows
PinableAgents Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 3 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -275,10 +275,12 @@ jobs:
V="${{ steps.ver.outputs.version }}"
# npm publish can print success without persisting; confirm against the
# registry (with retries for propagation) so green means really shipped.
# Up to 5 minutes per package: 1.6.1's packages all published fine but
# took longer than the old 60 s to appear, which failed the run.
for dir in release/npm/codegraph-* release/npm/main; do
name=$(node -p "require('./$dir/package.json').name")
ok=
for i in 1 2 3 4 5 6; do
for i in $(seq 1 30); do
if npm view "$name@$V" version >/dev/null 2>&1; then ok=1; break; fi
echo "waiting for $name@$V to appear ($i)…"; sleep 10
done
Expand Down
2 changes: 1 addition & 1 deletion .pinable/upstream.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"repository": "colbymchenry/codegraph",
"branch": "main",
"commit": "7639c787e48be92ea4ca83c5c014d8dd480de470"
"commit": "b635dd467f0578926a9c01a37b9d28d2b26689f1"
}
3 changes: 3 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@ Tests live in `__tests__/` and mirror the module they cover. Notable ones beyond

Tests create temp dirs with `fs.mkdtempSync` and clean up in `afterEach`. They write real files and exercise real SQLite — there is no DB mocking.

Every engine test file runs in a throwaway home dir (`__tests__/setup-home-sandbox.ts`, a `setupFiles` entry): `HOME`/`USERPROFILE` (+ Windows vars), `XDG_CONFIG_HOME` and `GIT_CONFIG_GLOBAL` point into it, and `CLAUDE_CONFIG_DIR`/`CODEX_HOME`/… are cleared; spawned children inherit it. It's a backstop — still inject writes to global state (e.g. `UpgradeDeps.wirePromptHook`, #2275).

### Windows-gated tests

Behavior that differs by platform (path resolution, drive letters, `SENSITIVE_PATHS`, `%APPDATA%` config dirs, CRLF) must be gated, not assumed. Use `it.runIf(process.platform === 'win32')(...)` for Windows-only assertions and `it.runIf(process.platform !== 'win32')(...)` for POSIX-only ones — e.g. `/etc` is sensitive on POSIX but resolves to `C:\etc` (non-existent) on Windows, so an ungated `/etc` assertion fails on Windows. Validate the Windows side for real (see below); don't merge a Windows-gated test you haven't seen run.
Expand Down Expand Up @@ -212,6 +214,7 @@ For any Windows-specific PR, bug, or implementation, validate it on the real Win
- Guest toolchain (winget): Node LTS, Git, and the **VC++ ARM64 redistributable** (required by `@rollup/rollup-win32-arm64-msvc`, which vitest pulls in).
- Fetch a contributor PR head straight from their fork to dodge `pull/<n>/head` lag: `git fetch <fork-url> <branch>` then `git checkout -f FETCH_HEAD`.
- Windows baseline: as of #2053 the full suite passes on the Windows 11 (ARM64) VM. The only expected exception is `security.test.ts > Session marker symlink resistance > does not follow a pre-planted symlink`, which needs symlink privileges (Developer Mode) — confirm any other failure against `origin/main` before blaming your PR. The former `mcp-initialize.test.ts` / `mcp-roots.test.ts` `EPERM` teardown failures came from tests spawning `serve --mcp` without the runtime flags (its `--liftoff-only` re-exec grandchild kept the cwd / SQLite file open); spawn it with `WASM_RUNTIME_FLAGS` and await the child's exit before removing the temp dir. Windows checkouts may be CRLF — split source lines on `/\r?\n/` in tests.
- Windows worker crashes: a worker thread that ends (`terminate()`, its own `process.exit()`, or the process exiting) while V8's concurrent marker is marking its heap kills the process with exit 3221225477 (0xC0000005) and leaves no error or dump. It's worst while the worker is still loading its modules. Owners must not terminate a worker before its first message (`workerStarted` / `terminateOnceStarted`, or the pool's own handshake), and a worker that exits itself calls `collectBeforeExit()` first — both in `src/worker-teardown.ts`. `--no-concurrent-marking` also stops it, but measured about a third slower indexing on the Windows VM, so it is not used.

## Releases

Expand Down
300 changes: 300 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions FORK.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,9 @@ node scripts/pinable/sync-upstream.mjs --check
```

`build:lib` 单独构建 UI 组件包,不会发布 npm 包。本次同步不改变包名、版本、发布凭据、已有 Release 工作流或主分支保护规则。

## 历史索引升级兼容

本 fork 从上游 1.6.2 同步起沿用上游 schema v15。旧 Pinable 数据库曾使用 v10/v12 记录工作台相关迁移,与上游后续编号冲突;升级时按实际表和索引补齐缺失的 synthesis 与失败导入重试能力,保留原迁移历史、图数据和游标分页索引。只读连接不会执行修复,已正常升级的数据库重复打开不会重复写入修复数据。

后续 fork 专属修复统一放在 `src/db/pinable-schema.ts`,通过特征检测和事务执行,不再占用上游数字迁移编号;上游迁移体复用原实现,避免两份 SQL 漂移。源码同步与运行时 Release 发布仍是分开的步骤。
17 changes: 9 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ CodeGraph detects web-framework routing files and emits `route` nodes linked by
| **Flask** | `@app.route('/path', methods=[...])`, blueprint routes |
| **FastAPI** | `@app.get(...)`, `@router.post(...)`, all standard methods |
| **Express** | `app.get(...)`, `router.post(...)` with middleware chains |
| **NestJS** | `@Controller` + `@Get/@Post/...`, GraphQL `@Resolver` + `@Query/@Mutation`, `@MessagePattern`/`@EventPattern`, `@SubscribeMessage` |
| **NestJS** | `@Controller` + `@Get/@Post/...` (with `RouterModule` prefixes, `setGlobalPrefix` and URI versioning), GraphQL `@Resolver` + `@Query/@Mutation`, `@MessagePattern`/`@EventPattern`, `@SubscribeMessage` |
| **Laravel** | `Route::get()`, `Route::resource()`, `Controller@action`, tuple syntax |
| **Drupal** | `*.routing.yml` routes (`_controller`, `_form`, entity handlers); `hook_*` implementations in `.module`/`.theme`/`.install`/`.inc` |
| **Rails** | `get '/x', to: 'users#index'`, hash-rocket `=>` syntax |
Expand All @@ -340,12 +340,13 @@ These frameworks additionally emit **`navigates`** edges: the function that send

| Router | Routes from | Navigation from |
|---|---|---|
| **Expo Router** | Every screen file under `app/` (`app/item/[id].tsx` → `/item/[id]`, groups stripped), bound to its default-export component | `router.push` / `replace` / `navigate`, template hrefs, `{ pathname }` objects, and a helper's returned href |
| **Expo Router** | Every screen file under `app/` (`app/item/[id].tsx` → `/item/[id]`, groups stripped), bound to its default-export component; `+api` files are endpoints (`GET /hello`) bound to their handlers | `router.push` / `replace` / `navigate`, template hrefs, `{ pathname }` objects, and a helper's returned href |
| **Next.js** | App Router `app/**/page.tsx` and Pages Router pages (`(group)` stripped, `[slug]` → `:slug`); `app/api/**/route.ts` exports and `pages/api/*` are endpoints, not screens | `router.push` / `replace` / `prefetch`, `redirect()` / `permanentRedirect()` in a server action or page, `NextResponse.redirect(new URL(…))` in middleware, `<Link href>` and internal `<a href>` |
| **React Router** | `<Route path component/element>` (v5 and v6) and `createBrowserRouter([{ path, element }])` | `history.push` / `replace`, `useNavigate`'s `navigate`, a loader's `redirect`, `<Link to>` / `<NavLink to>` / `<Navigate to>` / react-router-bootstrap's `<LinkContainer to>` |
| **React Router** | `<Route path component/element>` (v5 and v6) and `createBrowserRouter([{ path, element }])` | `history.push` / `replace`, `useNavigate`'s `navigate`, a loader's `redirect`, `<Link to>` / `<NavLink to>` / `<Navigate to>` / v5's `<Redirect to>` / react-router-bootstrap's `<LinkContainer to>`, and a `styled(Link)` wrapper |
| **TanStack Router** | `createFileRoute('/posts/$postId')` (file-based) and `createRoute({ path, getParentRoute })` composed up its parent chain (code-based); `_pathless` segments, `(group)` folders, `__root` and `<Outlet/>` layouts are not addresses | `navigate({ to })`, a thrown `redirect({ to })`, `<Link to>` / `<Navigate to>` — where `to` is the route PATTERN and the values ride beside it in `params` |
| **Vue Router** / **Nuxt** | `createRouter({ routes: [...] })` with the view each entry names, plus Nuxt `pages/` file-based routes, `server/api/` endpoints and route middleware | `router.push` / `replace`, `$router.push`, Nuxt's `navigateTo`, `<router-link>` / `<RouterLink>` / `<NuxtLink>` — **by route name** (`push({ name: 'profile' })`) as well as by path |
| **SvelteKit** | `src/routes/**/+page.svelte` (`[slug]` → `:slug`, `[[opt]]` → `:opt?`), joined to the `+page.server.js` beside it so a loader's guard belongs to its page | `goto('/x')`, `redirect(status, '/x')` from a load or form action, and the plain `<a href>` that is a link in a SvelteKit app |
| **Vue Router** / **Nuxt** | `createRouter({ routes: [...] })` / `new Router(...)` and the route tables it's given (`export const constantRoutes = [...]`, per-module route files), with the view each entry names — a lazy `() => import(…)` bound to its file — and `children` joined onto their parent's path, the parent being the layout around them; plus Nuxt `pages/` file-based routes, `server/api/` endpoints and route middleware | `router.push` / `replace`, `this.$router.push`, Nuxt's `navigateTo`, `<router-link>` / `<RouterLink>` / `<NuxtLink>` — **by route name** (`push({ name: 'profile' })`) as well as by path |
| **SvelteKit** | `src/routes/**/+page.svelte` (`[slug]` → `:slug`, `[[opt]]` → `:opt?`, `[id=matcher]` → `:id`, `(group)` folders stripped), joined to the `+page.server.js` beside it so a loader's guard belongs to its page | `goto('/x')`, `redirect(status, '/x')` from a load or form action, and the plain `<a href>` that is a link in a SvelteKit app |
| **Angular** | `Routes` arrays (`RouterModule.forRoot` / `forChild`, `provideRouter`, a routes file's default export) with `component` or a lazy `loadComponent`; `children` and lazy `loadChildren` (an NgModule's through its routing module) joined into full paths; paths written as route constants or `$localize` strings; a route with children is a layout around the screens inside it | `router.navigate([...])`, `navigateByUrl`, a guard's `createUrlTree` / `parseUrl` — a command array, a route constant, or a component property holding one — `routerLink` / `[routerLink]` in the component's template, and `redirectTo`. Each template's child components (`<app-foo>`) are linked to the component that renders them |

In a repository holding several apps, each app's routes are matched only against navigation written inside that app.

Expand All @@ -362,9 +363,9 @@ Real iOS and React Native codebases live across multiple languages — a Swift c
| **React Native legacy bridge** | JS `NativeModules.X.fn(...)` | ObjC `RCT_EXPORT_METHOD` / `RCT_REMAP_METHOD` · Java/Kotlin `@ReactMethod` | Parses macro/annotation declarations to build a JS-name → native-method map |
| **React Native TurboModules** | JS `import M from './NativeM'; M.fn(...)` | Native impl matching the Codegen spec | Treats the `Native<X>.ts` spec interface as ground truth |
| **RN native → JS events** | JS `new NativeEventEmitter(...).addListener('e', cb)` | ObjC `[self sendEventWithName:@"e" body:...]` · Swift `sendEvent(withName: "e", ...)` · Java/Kotlin `.emit("e", ...)` | Synthesized cross-language event channel keyed by literal event name |
| **Expo Modules** | JS `requireNativeModule('X').fn(...)` | Swift / Kotlin `Module { Name("X"); AsyncFunction("fn") { ... } }` | Parses the Expo DSL literals; synthetic method nodes resolve via existing name-match |
| **Expo Modules** | JS `requireNativeModule('X').fn(...)`, directly or through a binding (`export default requireNativeModule<T>('X')`) | Swift / Kotlin `Module { Name("X"); AsyncFunction("fn") { ... } }` | Parses the Expo DSL literals into method nodes; a call on a binding resolves to module `X`'s `fn` on both platforms, else to the method on the binding's declared type |
| **Fabric view components** | JSX `<MyView prop={v}/>` | TS Codegen spec + native impl class | Spec → `component` node; convention-based name+suffix lookup (`View`/`ComponentView`/`Manager`/`ViewManager`) bridges to native |
| **Legacy Paper view managers** | JSX `<MyView prop={v}/>` | ObjC `RCT_EXPORT_VIEW_PROPERTY` · Java/Kotlin `@ReactProp` | Same as Fabric — Paper-era declarations also produce `component` + `property` nodes |
| **Legacy Paper view managers** | JSX `<MyView prop={v}/>`, through a `requireNativeComponent('X')` module | ObjC `RCT_EXPORT_VIEW_PROPERTY` · Java/Kotlin `@ReactProp` | Same as Fabric — `requireNativeComponent('X')` is a JS `component` node, and Paper-era declarations also produce `component` + `property` nodes |

**Validated on real codebases** (small + medium + large for each bridge):

Expand All @@ -376,7 +377,7 @@ Real iOS and React Native codebases live across multiple languages — a Swift c
| Expo Modules | expo-haptics | expo-camera | expo SDK sweep (7 packages) |
| Fabric / Paper views | [react-native-segmented-control](https://github.com/react-native-segmented-control/segmented-control) | [react-native-screens](https://github.com/software-mansion/react-native-screens) | [react-native-skia](https://github.com/Shopify/react-native-skia) |

Each bridge emits edges tagged `provenance:'heuristic'` with `metadata.synthesizedBy:` set to a stable channel name (e.g. `swift-objc-bridge`, `rn-event-channel`, `fabric-native-impl`, `expo-module-extract`), so the agent can tell at a glance how a hop got into the graph.
Every bridge hop says how it got into the graph. A hop matched by a bridge resolver carries `metadata.resolvedBy: 'framework'` and `metadata.framework` naming the resolver (`swift-objc-bridge`, `react-native-bridge`, `expo-modules-js`, `fabric-view`). A synthesized channel is tagged `provenance:'heuristic'` with `metadata.synthesizedBy` (`rn-event-channel`, `fabric-native-impl`).

---

Expand Down
6 changes: 3 additions & 3 deletions TELEMETRY.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,9 @@ take, and there is nothing after it. This is a stronger guarantee than a promise
share: there is no second party to share with.

What is kept is checkable rather than asserted. The storage schema —
[`telemetry-worker/migrations/0001_init.sql`](telemetry-worker/migrations/0001_init.sql),
checked in beside the endpoint that writes it — is the complete list of what a row can
hold, with a comment on every column.
[`telemetry-worker/migrations/`](telemetry-worker/migrations/), checked in beside the
endpoint that writes it — is the complete list of what a row can hold, with a comment on
every column.

Individual events are **deleted after 90 days**. What outlives them is anonymous daily
totals: counts per day of things like operating system, version, and language, plus which
Expand Down
Loading
Loading