docs(competitive): add CodeGraphContext as Tier 1 competitor#675
docs(competitive): add CodeGraphContext as Tier 1 competitor#675carlos-alm merged 13 commits intomainfrom
Conversation
…nsertion (6.12) Roles: move classifyNodeRolesFull/Incremental SQL + classification logic to Rust (roles_db.rs). Single rusqlite connection runs fan-in/fan-out queries, computes medians, classifies roles, and batch-updates nodes — eliminates ~10 JS<->SQLite round-trips. Edges: add bulk_insert_edges (edges_db.rs) that writes computed edges directly to SQLite via rusqlite instead of marshaling back to JS. Restructure buildEdges to run edge computation in better-sqlite3 transaction, then native insert outside to avoid connection contention. 1-file regression fix: skip native call-edge path for small incremental builds (≤3 files) where napi-rs marshaling overhead exceeds savings. Both paths fall back gracefully to JS when native is unavailable.
…sify_dead_sub_role (#658)
…th (#658) The comment claimed barrel-edge deletion and re-insertion were atomic, but with the native rusqlite path the insertion happens in Phase 2 on a separate connection. Updated the comment to accurately describe the atomicity guarantee: JS path is fully atomic; native path has a transient gap that self-heals on next incremental rebuild.
…aram safety (#658) 200 rows × 5 params = 1000 bind parameters, which exceeds the legacy SQLITE_MAX_VARIABLE_NUMBER default of 999. While bundled SQLite 3.43+ raises the limit, reducing to 199 (995 params) removes the risk for any SQLite build with the old default.
#658) The native edge insert fallback path was silent, making it hard to diagnose when the native path fails. Added a debug() call so the fallback is visible in verbose/debug output.
…re 3.8) Add CodeGraphContext/CodeGraphContext (2,664 stars, Python, MIT) to the competitive analysis. Tree-sitter + graph DB (KuzuDB/FalkorDB/Neo4j), 14 languages, CLI + MCP, bundle registry, 10+ IDE setup wizard. Strong community traction but shallow analysis depth vs codegraph.
6.8 sub-100ms incremental rebuilds (#644), 6.9 AST bulk insert (#651), 6.10 CFG/dataflow bulk insert (#653), 6.11 native insert-nodes (#654), 6.12 native roles/edges (#658), 6.13 NativeDatabase class (#666), 6.14 native read queries (#671), 6.15 native write ops (#669). 6.16 (Dynamic SQL) and 6.17 (better-sqlite3 isolation) remain open.
…to perf/pr-675-review
|
Claude finished @carlos-alm's task —— View job PR Review: CodeGraphContext Competitive Analysis AdditionReviewing the addition of CodeGraphContext as Tier 1 competitor #11... Todo List:
Review Summary: ✅ LGTM - High Quality AdditionThis is an excellent competitive analysis addition that demonstrates thorough research and maintains document consistency. Strengths:📊 Accurate Positioning & Scoring
🎯 Balanced Competitive Assessment
📋 Document Maintenance Excellence
🔍 Research Quality
Minor Observations:
Technical Accuracy:All claims verified against the competitive analysis format and scoring rubric. The positioning as Tier 1 #11 is appropriate given their feature breadth and community size, while acknowledging analysis depth limitations. Recommendation: Merge - This addition strengthens the competitive analysis without overstating or understating CodeGraphContext's position in the ecosystem. |
Greptile SummaryThis PR adds CodeGraphContext/CodeGraphContext (2,664 stars, Python, MIT) as Tier 1 competitor #11 in the competitive analysis, and simultaneously marks ROADMAP sections 6.8–6.15 as complete, reflecting recently merged Rust/rusqlite implementation work. Key changes:
Confidence Score: 5/5Safe to merge — all changes are documentation updates with no runtime impact; previously flagged issues resolved; only one P2 question about PR number ordering. Both previously flagged issues (6.13 body contradiction and 6.8 missing #644) are resolved in this commit. The new CodeGraphContext entry is correctly placed, scored, and numbered. All 76 renumbered entries and 5 updated vs section headers have been verified. The single remaining item — the inverted PR number sequence for sections 6.14 vs 6.15 — is a P2 clarification question that does not block merge. docs/roadmap/ROADMAP.md — specifically the Key PRs for sections 6.14 (#671) and 6.15 (#669) which appear in reversed numerical order. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A["Competitive Analysis<br/>86+ tools ranked"] --> B["Tier 1: Direct Competitors<br/>score ≥ 3.0"]
A --> C["Tier 2: Niche / Partial<br/>score 2.0–2.9"]
A --> D["Tier 3: Minimal / Inactive<br/>score < 2.0"]
B --> E["#1–#10<br/>(existing)"]
B --> F["#11 NEW<br/>CodeGraphContext<br/>3.8 score, 2,664 stars"]
B --> G["#12 glimpse<br/>(was #11)"]
B --> H["#13–#87<br/>(renumbered)"]
F --> I["Features: 4"]
F --> J["Analysis Depth: 3"]
F --> K["Deploy Simplicity: 4"]
F --> L["Lang Support: 4"]
F --> M["Code Quality: 3"]
F --> N["Community: 5"]
Reviews (2): Last reviewed commit: "fix(roadmap): correct 6.13 body and add ..." | Re-trigger Greptile |
docs/roadmap/ROADMAP.md
Outdated
| ### 6.13 -- NativeDatabase Class (rusqlite Connection Lifecycle) ✅ | ||
|
|
||
| **Not started.** Foundation for moving all DB operations to `rusqlite` on the native engine path. Currently `better-sqlite3` (JS) handles all DB operations for both engines, and `rusqlite` is only used for bulk AST node insertion (6.9/PR #651). The goal is: **native engine → rusqlite for all DB; WASM engine → better-sqlite3 for all DB** — eliminating the dual-SQLite-in-one-process problem and unlocking Rust-speed for every query. |
There was a problem hiding this comment.
Section 6.13 heading/body contradiction
The heading was updated to include ✅ in this PR (implying the feature is complete), but the body text still reads **Not started.** and retains the original **Plan:** section with pending action items. This directly contradicts the ✅ marker and would mislead anyone reading the roadmap.
All other sections updated in this PR (6.9, 6.10, 6.11, 6.12, 6.14, 6.15) correctly replaced their body content with a "Complete." summary — section 6.13 was missed.
| ### 6.13 -- NativeDatabase Class (rusqlite Connection Lifecycle) ✅ | |
| **Not started.** Foundation for moving all DB operations to `rusqlite` on the native engine path. Currently `better-sqlite3` (JS) handles all DB operations for both engines, and `rusqlite` is only used for bulk AST node insertion (6.9/PR #651). The goal is: **native engine → rusqlite for all DB; WASM engine → better-sqlite3 for all DB** — eliminating the dual-SQLite-in-one-process problem and unlocking Rust-speed for every query. | |
| ### 6.13 -- NativeDatabase Class (rusqlite Connection Lifecycle) |
Either remove the ✅ from the heading (if this section is genuinely not started), or update the body to a "Complete." summary matching the pattern used by the other sections in this PR.
docs/roadmap/ROADMAP.md
Outdated
| - **Benchmark target:** Sub-100ms native 1-file rebuilds (current ~466ms on 473 files) | ||
| **Result:** Native 1-file incremental rebuilds: **466ms → 67–80ms** (target was sub-100ms). Roles incremental path: **255ms → 9ms** via edge-neighbour expansion with indexed correlated subqueries. | ||
|
|
||
| **Key PRs:** #622, #632 |
There was a problem hiding this comment.
PR #644 missing from Key PRs list
The updated body text for section 6.8 prominently credits PR #644 as the one that achieved the primary goal ("Sub-100ms incremental rebuilds achieved: 466ms → 67–80ms on 473 files (PR #644)"), but **Key PRs:** only lists #622, #632 — omitting #644 entirely.
| **Key PRs:** #622, #632 | |
| **Key PRs:** #622, #632, #644 |
|
Addressed all Greptile review feedback: P1 — Section 6.13 heading/body contradiction: Fixed. Updated the body from "Not started." + Plan section to a "Complete." summary referencing PR #666, matching the pattern used by sections 6.9–6.12, 6.14, 6.15. P1 — Section 6.8 Key PRs missing #644: Fixed. Added #644 to the Key PRs list (now reads: #622, #632, #644). P2 — Roadmap changes out of scope for docs(competitive) PR: The roadmap changes were already in a separate commit (3377262 |
Summary
Test plan