diff --git a/CHANGELOG.md b/CHANGELOG.md
index 43e1d3601..0697627b1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### Fixed
- **File watcher no longer marks edited files as fresh when another process holds the index lock.** When a second writer (concurrent `codegraph index`, a git hook, another MCP daemon) held `.codegraph/codegraph.lock`, `CodeGraph.sync()` returned a zero-shape no-op instead of throwing. The file watcher took that as a successful sync and cleared `pendingFiles` — so the per-file staleness signal MCP tools surface to agents (issue #403) dropped immediately, even though the edit was never indexed. `CodeGraph.watch()` now converts that no-op into a typed `LockUnavailableError` thrown into the watcher; the existing retry path preserves `pendingFiles` and reschedules until the lock becomes available. The error is logged at debug only (no `onSyncError` callback) so a long-running external indexer doesn't spam stderr every debounce cycle. Closes #449.
+- **TS/JS top-level initializer calls and inline-object-method calls are no longer dropped.** Calls inside a top-level variable initializer (`const token = getTokenMp()`) and inside methods of an inline object literal (`{ methods: { save() { getTokenMp() } } }`) were never walked by the variable / method-definition extractors, so `getTokenMp` showed up nowhere in `codegraph_callers`. The variable extractor now walks any non-object initializer value for calls; the method-definition extractor still avoids creating synthetic nodes for inline-object methods (the noise reason is unchanged) but now walks their bodies so the calls inside aren't lost. Surfaces in plain `.ts`/`.js` files (top-level `const x = foo()`) and in Vue SFCs (`
+`;
+ const result = extractFromSource('Issue425Setup.vue', code);
+
+ const call = result.unresolvedReferences.find(
+ (ref) => ref.referenceKind === 'calls' && ref.referenceName === 'getTokenMp'
+ );
+ expect(call).toBeDefined();
+ });
+
+ it('should extract calls from Vue Options API object methods', () => {
+ const code = `
+
+
+
+
+`;
+ const result = extractFromSource('Issue425Options.vue', code);
+
+ const calls = result.unresolvedReferences.filter(
+ (ref) => ref.referenceKind === 'calls' && ref.referenceName === 'getTokenMp'
+ );
+ expect(calls).toHaveLength(2);
+ });
+
it('should extract from both