Skip to content

Sync main with release/0.2.579 (api.wiki.codes MCP, 1h MCP timeout, C parser, extension parsers, bench/snapshot perf)#315

Open
justrach wants to merge 34 commits intomainfrom
merge/release-0.2.579-to-main
Open

Sync main with release/0.2.579 (api.wiki.codes MCP, 1h MCP timeout, C parser, extension parsers, bench/snapshot perf)#315
justrach wants to merge 34 commits intomainfrom
merge/release-0.2.579-to-main

Conversation

@justrach
Copy link
Copy Markdown
Owner

@justrach justrach commented Apr 22, 2026

Summary

Syncs main to the current tip of release/0.2.579.

This release branch now includes the wiki/api.wiki.codes remote backend work, the restored local HTTP server path, MCP/server safety fixes, remote-query validation, the long-running bundle activity fix, the semver bump to 0.2.579, the native C outline parser, extension/language detection coverage, lightweight outline parsers for the newly detected extension families, golden parser coverage for those extensions, clearer benchmark noise reporting, two snapshot performance improvements, and the direct api.wiki.codes MCP remote update, and the 1-hour MCP idle timeout with prompt dead-client cleanup.

Included changes

  • c4cc763 Restore codedb serve --port on Zig 0.16.
  • 2fbc66c Route MCP status output to stderr so stdio MCP responses are not contaminated by status logs.
  • aaba92e Make codedb serve port configurable through CODEDB_PORT.
  • 14c3160 Make codedb serve explicitly opt-in.
  • 8b43e89 Keep codedb serve available by default on port 6767.
  • c9d773c Add O(1) findSymbol lookup through the complete symbol index.
  • 74ba881 Harden server.isPathSafe against null bytes and backslash traversal.
  • 6ef7185 Resolve /file/read paths against the indexed root instead of process cwd.
  • fbb8b49 Make findAllSymbols merge indexed symbols with outline scan results so restored snapshots keep full coverage.
  • 3233de4 Bump semver to 0.2.579.
  • 1f04fad Add the wiki remote backend alongside the existing codegraff backend.
  • e7c9fd4 Add native C outline parsing for functions, structs, enums, unions, typedefs, macros, and common declarations.
  • 56af2f6 Reject empty codedb_remote queries for actions that require user input.
  • 3988c1f Refresh MCP bundle last_activity during long-running bundle work so the idle watchdog does not close stdin mid-call.
  • ad52783 Add language detection coverage for .mm, .java, .kt, .svelte, .vue, .astro, .sh, .css, .scss, .sql, .proto, .f90, .ll, .mlir, and .td.
  • 27b8d81 Add lightweight outline parsing for Java, Kotlin, Svelte/Vue/Astro, shell, CSS/SCSS, SQL, protobuf, Fortran, LLVM IR, MLIR, and TableGen.
  • 3ca698b Add per-extension golden outline checks and improve .cc/.mm parsing for C++ classes, #import, Objective-C interfaces/implementations/protocols, and ObjC method names.
  • 5b76d9c Make benchmark markdown status respect both the percentage threshold and absolute-ns threshold, with NOISE for tiny high-percent swings.
  • f6f12b6 Speed up snapshot JSON generation by reusing sorted paths, serializing the maintained symbol index, writing tree JSON directly, and chunking JSON escaping.
  • d99041b Cache codedb_snapshot responses by store sequence with a 16 MB cap, so repeated snapshot calls skip JSON rebuild until edits/indexing advance the sequence.
  • 32b5e3f Point codedb_remote at api.wiki.codes, map native query params, add wiki security/history actions (deps, score, cves, commits, branches, dep-history), and accept raw wiki slugs such as chromium.
  • 9a70fb4 Extend MCP idle timeout from 10 minutes to 1 hour while polling dead MCP clients every second.

Parser coverage

  • .cc parses C++ includes, classes, member-like functions, and free functions.
  • .mm parses #import, Objective-C @interface / @implementation / @protocol, Objective-C method names, C++ classes, and C-style functions.
  • Java/Kotlin parse imports, class-like declarations, methods/functions, and common vars/constants.
  • Svelte/Vue/Astro parse script imports/functions/constants and simple style selectors.
  • Shell parses sourced files, functions, and assignments.
  • CSS/SCSS parse selectors, variables, keyframes, mixins, and functions.
  • SQL parses common CREATE ... objects.
  • protobuf parses imports, messages, enums, services, and RPCs.
  • Fortran parses modules, uses, types, subroutines, functions, and programs.
  • LLVM IR parses functions, declarations, globals, and type aliases.
  • MLIR parses named modules and functions.
  • TableGen parses includes, classes/multiclasses, defs/defms, and lets.

Performance notes

The intended symbol lookup improvement in this release is c9d773c: findSymbol now uses the complete symbol index for O(1) lookup instead of relying on slower scan-style lookup for the common path. fbb8b49 keeps that indexed path while merging in outline scan results, so restored snapshots keep coverage without losing the faster lookup path.

Snapshot performance was improved in two layers:

Benchmark reporting now shows both percent delta and absolute ns delta. Rows only fail when both thresholds are exceeded; high-percent tiny absolute swings are labeled NOISE, matching the actual CI gate.

Validation

Notes

This branch now points at merge commit 4e38a29, the current release/0.2.579 tip.

Supersedes #314, which only covered the wiki backend subset.

justrach and others added 12 commits April 22, 2026 10:41
Port the legacy HTTP endpoint (stubbed in 56ea465 / v0.2.578) to the new
`std.Io.net` surface: bind 127.0.0.1 with `IpAddress.parse`/`listen`,
accept in a loop, and hand each stream to a detached thread. The routes
and JSON response shapes match the pre-0.16 implementation so existing
clients don't need changes.

Refs #307, #285

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
For `codedb mcp`, stdout is reserved for JSON-RPC messages. The root-policy
failure path wrote `✗ refusing to index temporary root: …` (and the normal
`✓ indexed` startup line) to stdout, which hosts reject with
`invalid character 'â' looking for beginning of value` on the leading UTF-8
byte of the status glyph.

Switch `out.file` to stderr once `cmd == "mcp"` is resolved, so every `out.p`
call on that path goes to stderr while stdout stays clean for protocol
messages.

Closes #304

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Read `CODEDB_PORT` from the environment; fall back to 7719 on absence
or parse failure. Unblocks running multiple instances on one host,
reverse-proxy setups, and integration tests that need an ephemeral port.

Refs #308

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
`Explorer.findSymbol` now looks up the name in `self.symbol_index` and
builds results from the cached locations. The full outline scan is kept
as a fallback for safety.

For the index to be authoritative, `rebuildSymbolIndexFor` no longer
skips `.import` / `.comment_block` kinds — those were being missed by the
O(1) path and forced callers into the slow scan. Indexing every kind
makes results match the scan-based path exactly.

Refs #309

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Drop the hardcoded 7719 fallback. If CODEDB_PORT is unset, `codedb serve`
exits with a clear message explaining how to enable it (suggested 47719,
since 7719 and 8080 tend to collide with other local processes). If set
but not parseable as u16, exit with an error.

Rationale: the HTTP server opens a network port; having it bind on a
predictable default when someone runs `codedb serve` accidentally is
worth avoiding. Treating the env var as the on/off switch keeps the
surface area minimal and makes the enabled case explicit in shell
history / process listings.

Refs #308

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Running `codedb serve` is itself the opt-in — codedb has no always-on
daemon, so gating the listener behind an additional CODEDB_PORT
requirement was belt-and-suspenders with no threat to block. Restore the
previous UX: `codedb serve` starts listening on a default port,
CODEDB_PORT stays as an optional override for collisions.

Default is now 6767 (picked off the beaten path — 7719 and 8080
collided with other local tooling).

Refs #308

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
`isPathSafe` only rejected absolute `/` paths and `..` segments split on
`/`, so inputs like `..\\..\\secret.txt` passed through — on platforms
where `\\` is a real separator this could reach files outside the
indexed tree through `/file/read` and `/edit`. Null bytes likewise could
truncate paths in downstream syscalls.

Mirror `mcp.isPathSafe`: reject null bytes and backslashes up front
before the `/`-split loop.

Addresses Codex P1 on #310.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The HTTP handler was opening files via `std.Io.Dir.cwd()`, but `codedb
<root> serve` indexes paths relative to the provided root. Launched from
any other directory, valid indexed paths hit the wrong base and returned
false 404s (or worse — read the wrong file).

Open via `explorer.root_dir` instead. Respond 500 with a clear error if
the root was never configured (shouldn't happen on the normal serve
path, but guards against a bare explorer).

Addresses Codex P2 on #310.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The earlier change early-returned after the `symbol_index` lookup, but
that map can be incomplete after fast-snapshot restore — `outlines` is
populated before `rebuildSymbolIndexFor` runs on every file, and later
watcher/edit updates only touch files they saw change. Symbols present
in untouched files were silently dropped from results once the index
had any entry for the name.

Keep the O(1) path for the common case, but always fall through into
the outline scan and dedupe against a per-call `(path, line_start)` set
so the scan fills gaps without duplicating index hits.

Addresses Codex P1 on #310.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rolls up:
  - Restore `codedb serve --port` on Zig 0.16 (#307)
  - Route MCP status output to stderr (closes #304)
  - Default serve port 6767; CODEDB_PORT override (#308)
  - O(1) findAllSymbols with safety merge-scan (#309)
  - Harden server.isPathSafe against `\` and NUL
  - /file/read resolves against indexed root

See PR #310.
Release candidate for the local-server trial roll-up (PR #310). Covers
the Zig 0.16 HTTP server restore, MCP stderr routing (#304), default
port 6767 with CODEDB_PORT override (#308), O(1) findAllSymbols (#309),
and the two Codex P1 fixes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
)

codedb_remote today only hits codedb.codegraff.com (WASM-on-Workers
indexer). Its sibling project codedb-cloud / wiki.codes is a
Zig-native parquet router with a superset of actions and more repos
indexed, but agents using codedb have no path to it.

Adds an optional `backend` field to codedb_remote. Default stays
"codegraff" — every existing caller is unchanged on the wire.

Backends + supported actions:

  codegraff (default):  tree, outline, search, meta
  wiki:                 tree, outline, search, symbol, policy

`symbol` (exact-identifier definition lookup across an indexed repo)
and `policy` (hot-pin size class) are new capabilities from wiki that
codegraff doesn't expose; `meta` stays codegraff-only.

Wiki requests go through the Vercel `/api/query` proxy at
https://www.wiki.codes which server-side-auths to the Hetzner router.
No client secrets, no API key. Slug is derived from the repo arg by
replacing '/' with '-' (matches wiki's canonical naming: rust-lang/rust
→ rust-lang-rust).

Per-backend action allowlists reject cross-backend mismatches with a
clear error:
  action 'meta' not supported on backend 'wiki'
    (wiki supports: tree, outline, search, symbol, policy)

Verified live against wiki.codes:
  codedb_remote repo=rust-lang/rust backend=wiki action=symbol
                query=HashMap
  → 25 hits in 686ms including
    library/std/src/collections/hash/map.rs:247 struct_def
    and impl_blocks, plus clippy + rust-analyzer test files

Closes #311.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Threshold: 10.00%

Tool Base (ns) Head (ns) Delta Status
codedb_bundle 533748 536557 +0.53% OK
codedb_changes 61965 63579 +2.60% OK
codedb_deps 10462 10457 -0.05% OK
codedb_edit 5679 6229 +9.68% OK
codedb_find 71680 66128 -7.75% OK
codedb_hot 106107 111765 +5.33% OK
codedb_outline 262643 267447 +1.83% OK
codedb_read 90433 97756 +8.10% OK
codedb_search 179887 186860 +3.88% OK
codedb_snapshot 2530330 2666094 +5.37% OK
codedb_status 108227 106957 -1.17% OK
codedb_symbol 59542 66054 +10.94% FAIL
codedb_tree 83458 90163 +8.03% OK
codedb_word 76300 78418 +2.78% OK

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1f04fad226

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/server.zig
Comment on lines +325 to +329
var req = edit_mod.EditRequest{
.path = path,
.agent_id = agent_id,
.op = op,
.content = content,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Resolve HTTP edit paths against project root

The /edit handler forwards the user-supplied relative path directly into edit_mod.applyEdit, but applyEdit reads from std.Io.Dir.cwd() (in src/edit.zig) rather than explorer.root_dir. When codedb serve is launched with an explicit root (for example codedb /tmp/proj serve), /file/read and indexing operate under /tmp/proj while /edit targets the process working directory, so edits can fail or mutate the wrong file if the same relative path exists there.

Useful? React with 👍 / 👎.

Comment thread src/server.zig
Comment on lines +360 to +364
const path = extractQueryParam(request, "path") orelse {
respondJson(&conn, "400 Bad Request", "{\"error\":\"missing ?path=\"}");
return;
};
if (!isPathSafe(path)) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Percent-decode /file/read paths before opening files

This route reads path from the query string and immediately validates/uses it, but never runs percentDecode. As a result, URL-encoded paths (for example path=src%2Fmain.zig or filenames containing spaces) are treated as literal % sequences and typically return file not found; other routes in this file already decode query values before lookup, so this creates an avoidable read regression for standard HTTP clients.

Useful? React with 👍 / 👎.

justrach and others added 4 commits April 22, 2026 21:55
Before this change, calling codedb_remote with action=search (or
action=symbol/outline on the wiki backend) but no 'query' argument
silently sent `q=` to the remote. codegraff.com would return an empty
result set or an unhelpful error, and users couldn't tell whether
their search was genuinely empty or the request was malformed.

Fail fast with a pointer at the missing field:

  error: action 'search' requires a non-empty 'query' (the search text)
  error: action 'symbol' requires a non-empty 'query' (the identifier name to look up)
  error: action 'outline' requires a non-empty 'query' (the file path to outline)

tree / meta / policy are unchanged (they legitimately take no query).

Verified via the MCP stdio interface:
  tools/call codedb_remote {"repo":"x","action":"search"}
    → error with guidance
  tools/call codedb_remote {"repo":"x","action":"symbol","backend":"wiki"}
    → error with guidance
  tools/call codedb_remote {"repo":"x","action":"tree","backend":"wiki"}
    → succeeds (unchanged)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The idle watchdog in main.zig closes stdin when `now - last_activity
> idle_timeout_ms` (10 min). But last_activity is only updated once
per incoming message — right after readLineBuf (mcp.zig:474). Inside
a single bundle call that takes longer than idle_timeout_ms (many
slow sub-ops, or ops that shell out to codedb_remote / codedb_tree
on big repos), the clock stays frozen at message-arrival time. At
the 10-minute mark the watchdog closes stdin mid-processing.

The main thread finishes the bundle and writes the response fine
(stdout is untouched), but the client — whose write-end of the
stdin pipe just got EPIPE'd — reports "Transport closed" on its
next tool call.

Fix: stamp last_activity at bundle start AND at the end of each
sub-op iteration, so active processing keeps us marked live.
Every sub-op takes a known-bounded time, so the watchdog can only
fire when the main thread truly has nothing in flight.

No change to the idle path: a bundle that completes in under 10min
doesn't touch last_activity beyond what was already there; sessions
that actually go idle still get reaped.

Fixes #278 for the bundle case. If "Transport closed" still surfaces
on non-bundle paths, we'll need a repro that doesn't go through
handleBundle.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[codex] Add native C outline parser
@justrach justrach changed the title Sync main with release/0.2.579 (wiki backend + 11 other commits) Sync main with release/0.2.579 (wiki backend, local server, native C parser) Apr 25, 2026
@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Threshold: 10.00%

Tool Base (ns) Head (ns) Delta Status
codedb_bundle 305641 308045 +0.79% OK
codedb_changes 30715 31534 +2.67% OK
codedb_deps 5273 5207 -1.25% OK
codedb_edit 4741 5288 +11.54% FAIL
codedb_find 42747 42613 -0.31% OK
codedb_hot 55937 56324 +0.69% OK
codedb_outline 160936 158222 -1.69% OK
codedb_read 50580 61979 +22.54% FAIL
codedb_search 137823 141811 +2.89% OK
codedb_snapshot 1981464 2103832 +6.18% OK
codedb_status 245218 241419 -1.55% OK
codedb_symbol 33005 35135 +6.45% OK
codedb_tree 46285 49383 +6.69% OK
codedb_word 39401 41593 +5.56% OK

codedb_remote: reject empty query on actions that consume it
mcp: refresh last_activity during long bundle processing (#278)
@justrach justrach changed the title Sync main with release/0.2.579 (wiki backend, local server, native C parser) Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes) Apr 25, 2026
@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Threshold: 10.00%

Tool Base (ns) Head (ns) Delta Status
codedb_bundle 521594 529093 +1.44% OK
codedb_changes 59795 60617 +1.37% OK
codedb_deps 10446 10056 -3.73% OK
codedb_edit 6241 5809 -6.92% OK
codedb_find 64679 71612 +10.72% FAIL
codedb_hot 108886 109517 +0.58% OK
codedb_outline 263754 265848 +0.79% OK
codedb_read 99448 91944 -7.55% OK
codedb_search 182761 180308 -1.34% OK
codedb_snapshot 2522355 2707906 +7.36% OK
codedb_status 106971 106776 -0.18% OK
codedb_symbol 64440 65338 +1.39% OK
codedb_tree 83849 115141 +37.32% FAIL
codedb_word 80197 77625 -3.21% OK

@justrach justrach changed the title Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes) Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes, extension coverage) Apr 25, 2026
@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Threshold: 10.00%

Tool Base (ns) Head (ns) Delta Status
codedb_bundle 476714 487170 +2.19% OK
codedb_changes 56421 54838 -2.81% OK
codedb_deps 8582 9001 +4.88% OK
codedb_edit 6199 5098 -17.76% OK
codedb_find 59269 62728 +5.84% OK
codedb_hot 95959 95356 -0.63% OK
codedb_outline 228302 235300 +3.07% OK
codedb_read 84353 84085 -0.32% OK
codedb_search 173262 174494 +0.71% OK
codedb_snapshot 2499381 2613031 +4.55% OK
codedb_status 217074 206308 -4.96% OK
codedb_symbol 53906 59512 +10.40% FAIL
codedb_tree 75873 66441 -12.43% OK
codedb_word 68348 68672 +0.47% OK

parse: add lightweight outlines for common extensions
@justrach justrach changed the title Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes, extension coverage) Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes, extension parsers) Apr 25, 2026
@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Threshold: 10.00%

Tool Base (ns) Head (ns) Delta Status
codedb_bundle 473330 473925 +0.13% OK
codedb_changes 54001 52821 -2.19% OK
codedb_deps 9096 9585 +5.38% OK
codedb_edit 5467 4883 -10.68% OK
codedb_find 61395 61520 +0.20% OK
codedb_hot 96749 97930 +1.22% OK
codedb_outline 236917 247181 +4.33% OK
codedb_read 82612 84539 +2.33% OK
codedb_search 175286 179458 +2.38% OK
codedb_snapshot 2486132 2675831 +7.63% OK
codedb_status 216170 213036 -1.45% OK
codedb_symbol 55851 60504 +8.33% OK
codedb_tree 76964 68870 -10.52% OK
codedb_word 68061 71188 +4.59% OK

@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Threshold: 10.00%

Tool Base (ns) Head (ns) Delta Status
codedb_bundle 522381 536132 +2.63% OK
codedb_changes 61945 61147 -1.29% OK
codedb_deps 10315 11922 +15.58% FAIL
codedb_edit 5772 5238 -9.25% OK
codedb_find 69758 65882 -5.56% OK
codedb_hot 109382 109638 +0.23% OK
codedb_outline 263786 273092 +3.53% OK
codedb_read 112689 94931 -15.76% OK
codedb_search 188256 182085 -3.28% OK
codedb_snapshot 2485467 2683389 +7.96% OK
codedb_status 104283 104640 +0.34% OK
codedb_symbol 61827 70672 +14.31% FAIL
codedb_tree 83688 76150 -9.01% OK
codedb_word 77905 78037 +0.17% OK

@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Thresholds: 10.00% and 50,000 ns absolute delta

NOISE means the percentage threshold was exceeded, but the absolute delta was too small to fail CI.

Tool Base (ns) Head (ns) Delta Abs Delta (ns) Status
codedb_bundle 474911 511824 +7.77% +36913 OK
codedb_changes 59606 65518 +9.92% +5912 OK
codedb_deps 9139 8905 -2.56% -234 OK
codedb_edit 5795 6023 +3.93% +228 OK
codedb_find 61024 65495 +7.33% +4471 OK
codedb_hot 98818 95147 -3.71% -3671 OK
codedb_outline 245363 241065 -1.75% -4298 OK
codedb_read 93419 82867 -11.30% -10552 OK
codedb_search 173927 177880 +2.27% +3953 OK
codedb_snapshot 2511827 2736546 +8.95% +224719 OK
codedb_status 232642 213401 -8.27% -19241 OK
codedb_symbol 56114 57059 +1.68% +945 OK
codedb_tree 74321 69987 -5.83% -4334 OK
codedb_word 69906 69346 -0.80% -560 OK

@justrach justrach changed the title Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes, extension parsers) Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes, extension parsers, bench reporting) Apr 26, 2026
@justrach justrach changed the title Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes, extension parsers, bench reporting) Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes, extension parsers, bench/snapshot perf) Apr 26, 2026
@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Thresholds: 10.00% and 50,000 ns absolute delta

NOISE means the percentage threshold was exceeded, but the absolute delta was too small to fail CI.

Tool Base (ns) Head (ns) Delta Abs Delta (ns) Status
codedb_bundle 480191 485081 +1.02% +4890 OK
codedb_changes 58193 54943 -5.58% -3250 OK
codedb_deps 9104 9272 +1.85% +168 OK
codedb_edit 5780 5875 +1.64% +95 OK
codedb_find 59133 61545 +4.08% +2412 OK
codedb_hot 94576 99716 +5.43% +5140 OK
codedb_outline 234360 232481 -0.80% -1879 OK
codedb_read 81875 87247 +6.56% +5372 OK
codedb_search 171686 174915 +1.88% +3229 OK
codedb_snapshot 2500504 254342 -89.83% -2246162 OK
codedb_status 222023 212735 -4.18% -9288 OK
codedb_symbol 56526 59621 +5.48% +3095 OK
codedb_tree 74586 79507 +6.60% +4921 OK
codedb_word 66845 67765 +1.38% +920 OK

@justrach justrach changed the title Sync main with release/0.2.579 (wiki backend, local server, C parser, MCP fixes, extension parsers, bench/snapshot perf) Sync main with release/0.2.579 (api.wiki.codes MCP, wiki backend, C parser, extension parsers, bench/snapshot perf) Apr 26, 2026
@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Thresholds: 10.00% and 50,000 ns absolute delta

NOISE means the percentage threshold was exceeded, but the absolute delta was too small to fail CI.

Tool Base (ns) Head (ns) Delta Abs Delta (ns) Status
codedb_bundle 493948 515835 +4.43% +21887 OK
codedb_changes 55219 57804 +4.68% +2585 OK
codedb_deps 8910 9506 +6.69% +596 OK
codedb_edit 5803 6526 +12.46% +723 NOISE
codedb_find 62007 61474 -0.86% -533 OK
codedb_hot 100689 102071 +1.37% +1382 OK
codedb_outline 237705 235757 -0.82% -1948 OK
codedb_read 87012 88897 +2.17% +1885 OK
codedb_search 175412 173384 -1.16% -2028 OK
codedb_snapshot 2525169 275114 -89.11% -2250055 OK
codedb_status 215711 220058 +2.02% +4347 OK
codedb_symbol 55944 61402 +9.76% +5458 OK
codedb_tree 78051 91225 +16.88% +13174 NOISE
codedb_word 69837 72518 +3.84% +2681 OK

@justrach justrach changed the title Sync main with release/0.2.579 (api.wiki.codes MCP, wiki backend, C parser, extension parsers, bench/snapshot perf) Sync main with release/0.2.579 (api.wiki.codes MCP, 1h MCP timeout, C parser, extension parsers, bench/snapshot perf) Apr 26, 2026
@github-actions
Copy link
Copy Markdown

Benchmark Regression Report

Thresholds: 10.00% and 50,000 ns absolute delta

NOISE means the percentage threshold was exceeded, but the absolute delta was too small to fail CI.

Tool Base (ns) Head (ns) Delta Abs Delta (ns) Status
codedb_bundle 491204 486625 -0.93% -4579 OK
codedb_changes 55231 53827 -2.54% -1404 OK
codedb_deps 9314 9379 +0.70% +65 OK
codedb_edit 6100 5845 -4.18% -255 OK
codedb_find 62613 64718 +3.36% +2105 OK
codedb_hot 101313 97912 -3.36% -3401 OK
codedb_outline 231669 243081 +4.93% +11412 OK
codedb_read 90035 85645 -4.88% -4390 OK
codedb_search 179410 175348 -2.26% -4062 OK
codedb_snapshot 2559399 257865 -89.92% -2301534 OK
codedb_status 214826 219135 +2.01% +4309 OK
codedb_symbol 55703 62278 +11.80% +6575 NOISE
codedb_tree 75930 93874 +23.63% +17944 NOISE
codedb_word 71827 69412 -3.36% -2415 OK

@justrach
Copy link
Copy Markdown
Owner Author

Speed note for the #328 timeout change

I compared the current sync head (4e38a29, includes #328) against the immediately previous 0.2.579 build before the 1-hour timeout change.

  • GitHub bench-regression for Extend MCP idle timeout to one hour #328 passed; all benchmark rows were OK under the 10% / 50,000ns gate.
  • Local MCP lifecycle smoke showed no material regression:
    • initialize avg: 40.2 ms current vs 41.2 ms previous
    • tools/list avg: 0.2 ms current vs 0.1 ms previous
    • codedb_status avg: 0.1 ms current vs 0.1 ms previous
    • normal stdin-close shutdown avg: 1195.5 ms current vs 1189.6 ms previous
  • Remote api.wiki.codes calls still work on current for chromium policy and axios/axios CVEs; timings are network-bound, so I treated those as smoke checks.

Detailed comparison is on #328: #328 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant