mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-10-01 02:01:24 +00:00
* docs: add Objective-C fork provider notes * feat(objective-c): add deterministic provider and grammar * feat(objective-c): finalize provider MVP * fix(objective-c): harden provider integration * fix(objective-c): normalize bare macro markers * docs(objective-c): integrate provider documentation * fix(objective-c): harden resolution and header classification * fix(objective-c): complete provider follow-ups * fix: address Objective-C review follow-ups * chore: format Objective-C grammar sources * fix(objective-c): harden review follow-ups * Address PR review feedback (#3179) Keep Objective-C chunking and macro recovery aligned with the grammar, and stop Community MEMBER_OF edges from leaking into symbol context. Co-authored-by: Cursor <cursoragent@cursor.com> * Address follow-up review on ObjC chunking and language fallback. Keep preprocessor directive text from changing file-scope brace depth, group real ivar nodes, skip header modifiers, and restore Rakefile/Gemfile detection through getLanguageFromFilename. Co-authored-by: Cursor <cursoragent@cursor.com> * Parse Objective-C headers with the objc grammar in embeddings. ensureAndParse and structural extraction now use the same content classifier as ingest, including method snippets from .h files, so Protocol/Category/Class chunks are not re-parsed as C++. Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR review feedback (#3179) Keep file-scope macro elision off C line splices and @interface/@protocol/@implementation bodies, and attach ivar attributes to the following instance variable when chunking. Co-authored-by: Cursor <cursoragent@cursor.com> * chore(bench): rebaseline Objective-C CSV emit * feat(objective-c): add workspace resolution and linear emit benches Plain .h files are classified as C++, so the ObjC pass could not resolve #import of those headers. Load a C/C#-style workspace once per pass, and keep protocol-candidate USES linear. Refs #3179 Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR review feedback (#3179) - Compare LadybugDB labels() as a scalar when excluding Community MEMBER_OF edges. - Walk superclass members, skip file-static C sibling defs, and ignore comments in ObjC header/macro scans. Note: pre-existing failure in objective-c-provider integration (worker-pool ready timeout) not addressed by this PR. Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR review feedback (#3179) Emit Objective-C declaration captures so compilation-unit siblings can share header/implementation bindings, and keep class vs protocol visibility groups distinct. Note: pre-existing failure in worker-pool startup (GITNEXUS_WORKER_READY_TIMEOUT_MS) not addressed by this PR. Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR review feedback (#3179) Emit every comma-separated property/ivar declarator, and count @interface after a multiline block comment closes so in-declaration macros stay intact. Note: pre-existing failure in worker-pool startup (GITNEXUS_WORKER_READY_TIMEOUT_MS) not addressed by this PR. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: ximengkai <ximengkai@soyoung.com> Co-authored-by: Gergő Magyar <gergomagyar@icloud.com> Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|---|---|---|
| .. | ||
| baselines-streaming.json | ||
| baselines.json | ||
| measure-streaming.mjs | ||
| measure.mjs | ||
| README.md | ||
Emit-persistence bench (#2203)
Build-free throughput + byte-identity guard for the CSV-generation half of
the graph-DB persistence pipeline (streamAllCSVsToDisk), which dominates
large-repo analyze wall time alongside parsing (issue #2203).
# from gitnexus/
node --import tsx bench/emit-persistence/measure.mjs # print one JSON line
node --import tsx bench/emit-persistence/measure.mjs --check # gate vs baselines.json
What it measures
A synthetic KnowledgeGraph (files + functions + classes + 4 edge types across
the File→Function, File→Class, Function→Function label pairs) at two
scales:
elapsed_ms_small/elapsed_ms_large— median wall-clock overREPSruns ofstreamAllCSVsToDisk.scaling_ratio—(t_large/t_small)/(LARGE/SMALL); ~1.0 is linear. The--checkgate fails if it exceedsscaling_budget(catches an O(n²) re-regression in the emit/routing path).fingerprint— order-independent sha256 over every emitted CSV line (node CSVs + per-FROM→TO-label-pair rel CSVs). This is the byte-identity gate: the U2 (direct per-pair routing) and U3 (per-row microtask elimination) optimisations must not change graph content, and any future change that does fails--check. Byte-identity holds for all quote-free ids; for an id containing a"the router intentionally diverges from — and is more correct than — the legacy regex oracle (seesrc/core/lbug/rel-pair-routing.ts).
What it does NOT measure
- The LadybugDB
COPYhalf. Bulk loading needs a live writable DB connection, so it can't run build-free. Its per-stage timing lives in the runtimePROF_LBUG_LOAD=1breakdown ([lbug-load prof] csv-emit=… copy-nodes=… copy-rels=… fallback=… total=…) and is exercised end-to-end by the integration round-trip tests (test/integration/basicblock-roundtrip.test.ts,lbug-core-adapter.test.ts). - Content extraction. Bench nodes have no backing source files, so the
contentcolumn is empty — emit cost here reflects the CSV machinery (routing, escaping, buffering, disk writes), not file reads. - At-scale absolute numbers. The real postgres / kernel-
fs/wall (issue #2203's table) is a maintainer-run measurement; this synthetic bench is the reproducible regression guard, not a substitute for those runs.
Deferred follow-up
Parallelising the COPY loop (PARALLEL=false is load-bearing; LadybugDB is
single-writer) is out of scope for #2203 pending empirical validation of
concurrent-COPY support — the PROF_LBUG_LOAD breakdown is the prerequisite
that shows whether COPY is the dominant cost worth that risk.
Regenerating the baseline
node --import tsx bench/emit-persistence/measure.mjs # copy fingerprint + ratio into baselines.json