Changelog
Every change,
documented.
GhostMap product changelog. Every user-visible fix and feature is logged here with the reasoning behind it.
Site / docs / extension source sync
- Version stamp – updated public copy from 0.0.1 to 0.5.0 across the README and install snippets.
- Distribution truth – reframed the home page, roadmap, and install docs so local VSIX packaging is the current channel, GitHub Releases are planned post-tag, the VS Code Marketplace listing is planned and depends on publisher onboarding, and Open VSX is documented as the planned bridge for VSCodium and other Open VSX-compatible editors.
- V1 vs V2 scope – the "how it works" page now distinguishes the V1 active-file Ghost Tree + per-document cache from the V2 workspace-wide indexing engine direction (Ghost Index v2 + Ghost Watcher), which is designed but not shipped.
- Language expansion – the features page now separates the 19 currently supported languages from the planned ~20-language expansion workstream gated on Tree-sitter packaging, WASM provenance, query validity, and fixture coverage.
- Enterprise framing – the roadmap, Privacy Policy, and Terms of Use now flag Jira / Slack, Ghost Threads, Ghost Graph, dashboards, AI explanations, and permissions / audit log as future Enterprise roadmap capabilities that are not shipped today and would require their own privacy notice and consent before any integration with server services.
Fixes
- C# constructors - K&R and Allman constructors now appear in the Ghost Tree. Added pattern with
[A-Z]anchor to distinguish from method calls. - PHP method recognition - Day-1 regex bug:
public function foo()was invisible in large PHP files because onlystaticconsumed its trailing space. All modifiers now handle whitespace uniformly. - C#
varfields - Class-levelvardeclarations now appear. Local variables inside method bodies are correctly suppressed. - Status badge in TreeView title - GhostMap now shows
[loading],[cached],[stale-cache], and discard reasons directly in the panel header. - Restored
setLoading()- A previous round removed what seemed like a redundant call; it wasn't. Stale-cached trees no longer appear as "complete" while a refresh runs. - Removed background fingerprint validator - The round-5 attempt used synchronous file IO on the Extension Host main thread, causing 2-10 s freezes under RAM pressure. Removed. Optimistic trust + lazy mismatch detection remains.
Performance
- LSP timeout reduced - 1500 ms → 800 ms. Halves the cold-LSP stall on first open.
- Small-file fast path - Files under 500 lines with an active LSP skip Tree-sitter + regex entirely, saving up to 1.2 s of WASM load.
- Cold-start fast path (Ghost Index) - Persisted snapshots now load as trusted on activate. First open of a known file: tree paints in <50 ms instead of 5-35 s.
- Tiny file bypass - Files under 50 lines skip the 200 ms tab-spam backpressure window.
- Lazy LSP warm-up - GhostMap pre-warms the active language server on activate, then staggered warm-ups for other visible editors after 2 s idle.
Fixes
- Live scanner references - Parent class arrows were missing in 60 k-line C#/Java files after the scanner mutated item ranges and callers held stale clones. Scanner now exposes live references.
- Trailing comment backtrack - Comments between two methods were absorbed into the previous block's range. Fixed for Python, Ruby, Julia, Elixir.
const/letarrow functions -const fetch = () => {}was invisible in JS/TS/TSX. Fixed with a dedicated pattern.- Multi-line string state - PHP heredocs, JS template literals, Java text blocks now tracked across lines. Braces inside strings no longer desync the frame stack.
- Tab-switch race condition - A slow LSP call no longer pays the full 800 ms timeout after the user switches tabs. The wait polls every 50 ms and aborts immediately.
Nesting correctness
- Allman brace support - C#, Java, C++, C, Go: methods with the opening brace on a separate line now appear correctly nested.
- Multi-line method signatures - TS, Java: methods with arguments spread across multiple lines are detected.
- Python / Ruby / Julia / Elixir nesting - Indent-stack tracker added. Indent-based languages now produce nested trees, not flat lists.
- Pending body FIFO queue - Two declarations queued before a
{no longer overwrite each other. - Anonymous frame guard -
const x = { run() {} }no longer produces a spuriousrunin the tree. - Native LSP hierarchy preservation - LSP-provided children are no longer thrown away during the flatten + rebuild round trip.
Testing infrastructure
- Added mocha + chai + ts-node test harness with a hand-written VS Code stub.
- 84-cell icon matrix, 6-fixture nesting matrix, 4-cell anchor matrix.
- 139 tests passing at end of round 4.
- Publish coalescer - 87% fewer TreeView event fires during a 60 k-line progressive scan.
- Progressive scanner - Regex-based scanner for large files, batch-yielding via
setImmediateto keep the editor responsive. C++ 60 k scan: from ~19.5 s to ~33 ms. - Resumable scan - Mid-scan tab switches no longer discard minutes of partial work.
- SHA-256 cache fast path - Tab switch to a warm-cached file skips fingerprinting entirely.
- Local state persistence -
.ghostmap/snapshot file introduced.
- Initial GhostMap extension: TreeView wired,
@ghostannotation parser, foreground refresh scheduling. - Basic anchor types: contextual, named, range.
- Initial license. First commit.
See the full iteration log.
Every round is documented in detail in the docs - rationale, files touched, and tests that lock the behaviour in.
Read the changelog →
GhostMap