Skip to content

v0.62.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 06:10
· 783 commits to main since this release

526 commits since v0.61.0, two weeks of work. Most of it went into one thing: making the daemon start faster and stop eating your RAM. The rest is language coverage, a stack of search-recall fixes, and packaging work for Linux and Windows.

Startup is faster and a lot lighter

PR #443 is 173 commits aimed squarely at cold indexing. Numbers are from the same 29-repo corpus, fresh SQLite store, 3 GiB admission budget:

v0.61 v0.62
Cold ready 17m35s 13m21s
Graph queryable 8m01s 6m19s
Footprint once ready 1.8 GiB 1.0 GiB
Peak footprint 5.3 GiB 3.7 GiB
Total allocation 92.3 GiB 70.6 GiB

Warm restart is unchanged at roughly 26 seconds.

Heads up: repo prefixes are now mandatory

Node IDs always carry a repo prefix now. RepoMetadata.Unprefixed is gone, along with every single-repo fallback that depended on it, so a lone tracked repo is just the first entry in the workspace rather than a special case. Stored notes and memories get their anchors carried onto the prefixed IDs on load, so you shouldn't lose anything, but if you've built anything against bare node IDs it will need updating.

Language coverage

PHP got the largest rewrite. Symbols and references carry namespace identity, composer.json is indexed so PHP repos actually have a dependency graph, PHPUnit and Pest tests are detected, .phtml templates are indexed, and call receivers are typed so member calls bind to the right method instead of guessing at a same-directory match. Untyped properties get their type from what the class assigns them, and self:: / static:: resolve through the enclosing class.

Rust was the other big one. The old query set was quietly missing a lot of items and call sites; those are captured now. Entry-point detection means binary crates no longer read as entirely dead code. Trait impls are recorded as edges, tuple structs and enum payloads emit fields, and consts and statics get an owner and a kind.

For C#, this release adds DI binding edges, partial-class merging, ASP.NET entry points, and namespace-aware type-reference resolution where the enclosing namespace outranks a using. Hangfire's deferred-lambda registrations now emit receiver-typed spawn edges. Null-conditional invocations emit call edges, and type references no longer get dropped in caseless scripts.

Java picks up method references: Type::new, qualified forms, and references inside field and static initializers. An overloaded reference binds to the whole overload set rather than picking one arbitrarily.

Python gets module-level variable nodes, class inheritance edges, aliased imports, and receiver typing from self, cls and annotated parameters.

Smaller items: Terraform declarations emit config-key nodes, and Lambda env vars now act as cross-repo contract providers. A multi-statement SQL migration has every CREATE TABLE extracted, not just the first. NodeNext emitted-JavaScript import specifiers resolve back to their TypeScript source, including through re-export barrels.

Search recall

PR #416 fixed four failures that stacked on each other: post-filters could empty a page with no refetch, cross-repo FTS floods could starve a scoped search, exact-name container hits could eclipse the whole FTS tier, and persisted FTS readiness was lost on warm restart. If scoped searches have been returning less than you expected, this is likely why.

The localization pipeline behind explore also got a pass, mostly around keeping evidence attached to the answer and being honest about when a call is actually terminal instead of asking for another round trip.

Reliability

A reindex writer-gate timeout used to take the daemon down with it; now it's tolerated. Parse trees are released on every incremental path, which closes the CGo leak that was retaining memory across reindexes. Interrupted durable resolver passes recover instead of losing their tail state. Idle trigram caches evict on deadline. Files that are present but excluded now get evicted on reindex instead of lingering in the graph.

Every MCP tool, resource and prompt carries a request deadline, and the daemon control plane is bounded so a busy daemon can't hang the CLI behind the indexer. Streamable HTTP recovers expired sessions rather than failing the request.

Packaging and tooling

Linux release binaries are statically linked, so they run on any distro. Custom tree-sitter grammars decline cleanly in a static build instead of crashing, and CI catches a static-link regression on the PR rather than at tag time.

Windows fixes throughout: path separators in search_text, graph relative paths, file-delta keying and bundle package keys, plus sidecar handle leaks that were breaking test cleanup.

gortex doctor is a top-level verb now and reports on real runtime evidence. It covers every agent instead of just Codex, tells "did not run" apart from "cannot tell", and --redact works.

Thanks

External contributors this release: Tien Dung Dao (@tiendungdev), Peter Bednarčík (@pbednarcik), Peter Chanthamynavong (@peterkc), @dsh971, @yimingll, Vitalii Pedchenko (@vitaliyslion), Pitchfork-and-Torch (@Pitchfork-and-Torch), and Christophe (@yimingll).

Changelog
  • af0403c Always mint a repo prefix; a lone repo is just the first tracked repo
  • cd2b8cb Apply a refreshed workspace config to live indexers on daemon reload
  • 2d75e34 Apply review polish to DI extraction and partial merge
  • e5e3dd5 Assert repo-prefix parity end to end, and correct the docs
  • 9e06e19 Attest review coverage from indexed test symbols, not path fragments
  • b063ce3 Attribute Python module-level and class-body calls to the file node
  • 79e87a8 Bind PHP imports to the class they name and keep inherited calls off guesses
  • 75179ae Bind Python imports written with an alias
  • 99d745c Bump version to v0.62.0
  • a1d7e02 Capture the Rust items and call sites the query set never matched
  • 7a7b13c Carry stored note and memory anchors onto prefixed symbol ids
  • 372167a Clamp find_clones to the session workspace
  • 933c5f6 Compile every DI binding emitter and consumer against one spelling
  • 16c913d Correct the comments that still describe a daemon single-repo mode
  • 618dd8a Delete RepoMetadata.Unprefixed and the lone-repo fallbacks it gated
  • ca49514 Detect PHPUnit and Pest tests
  • 259e6eb Detect Rust entry points so binary crates are not all dead code
  • 09227a2 Document and pin the named-node narrowing in HasLanguage
  • 3c13349 Document the SQL coverage boundary
  • 93642da Document what the Rust extractor now covers
  • b624092 Drop the PHP call-walk helpers left unused by the rewrite
  • 4f7159d Emit PHP property and class-constant usage edges
  • 428d639 Emit Python module-level variable nodes
  • b9764a9 Emit call edges for C# null-conditional invocations
  • f7af611 Emit fields for tuple structs and enum-variant payloads
  • 3860106 Emit inheritance edges for Python classes
  • d8b8489 Emit receiver-typed spawn edges for deferred-lambda registrations
  • d7663a9 Expand PHP grouped use declarations and record import metadata
  • 963d0e7 Extract PHP file-scope statements and anonymous classes
  • bf85d47 Extract every CREATE TABLE in a multi-statement SQL file
  • 0f21d50 Fence the standalone Indexer's empty repo prefix
  • df7d899 Fix search_text returning zero results below the repo root on Windows
  • 4eb8ebb Flag orphan_tables and unreferenced_tables when nothing was compared
  • af68590 Forward the caller's flags to the detached daemon child
  • 36dc6a0 Give PHP complexity metrics and index .phtml templates
  • 46da518 Give PHP symbols namespace identity and bind references through it
  • 912f8e0 Give Rust consts and statics an owner, a kind, and metadata
  • 55bdd78 Implement backend HasLanguage/NodesByKindLang, gate the partial merge
  • 0b69295 Index composer.json so PHP repos have a dependency graph
  • 9e11627 Make covering-test attribution agree with the graph's test edges
  • 9071ffa Make every repo narrow agree on prefix-less nodes
  • 2b7cdde Merge pull request #331 from zzet/fix/localization-terminal-evidence-replay-minimal-indexed
  • 514c6af Merge pull request #347 from Pitchfork-and-Torch/fix/evict-excluded-files-on-reindex
  • 95f19d1 Merge pull request #348 from zzet/fix/codex-global-instructions-file
  • 5a4966e Merge pull request #351 from zzet/feat/gortex-doctor-runtime
  • 4d39a50 Merge pull request #352 from zzet/feat/hook-log-agent-dimension
  • 2500c6a Merge pull request #353 from zzet/fix/doctor-mixed-attribution-and-redact
  • 1288cfc Merge pull request #354 from zzet/fix/hook-guards-bash-writes-to-indexed-source
  • 0bd51d7 Merge pull request #355 from zzet/fix/static-link-linux-release-binaries
  • 38b915b Merge pull request #356 from zzet/fix/stop-hook-session-attribution
  • 3d32d03 Merge pull request #357 from zzet/fix/read-operation-singular-alias
  • 9272255 Merge pull request #358 from zzet/fix/lsp-budget-test-wallclock-flake
  • 79a1e58 Merge pull request #359 from zzet/fix/daemon-status-repo-file-count
  • 903952f Merge pull request #360 from zzet/fix/savings-price-current-model-generation
  • 2362c85 Merge pull request #362 from zzet/dependabot/github_actions/actions-minor-patch-277cc3a3c6
  • 2ab760b Merge pull request #363 from zzet/dependabot/go_modules/go-minor-patch-a0e30b39f3
  • 551a25b Merge pull request #364 from zzet/fix/doctor-report-every-agent
  • 36f9f70 Merge pull request #365 from yimingll/fix/search-text-windows-path-separator
  • 095ffba Merge pull request #367 from yimingll/fix/csharp-null-conditional-call-edge
  • cb173ba Merge pull request #369 from yimingll/fix/graph-rel-path-separator
  • 3bd70cf Merge pull request #372 from yimingll/fix/csharp-caseless-type-refs
  • 59d5caf Merge pull request #374 from pbednarcik/feat/csharp-di-partial-entrypoints
  • ae37ff7 Merge pull request #377 from zzet/fix/daemon-detach-forwards-flags
  • 7ef243b Merge pull request #378 from zzet/fix/tighten-di-prefilter-share-meta-keys
  • 3501c02 Merge pull request #379 from zzet/fix/nodenext-emitted-js-import-specifiers
  • ab6e0d2 Merge pull request #380 from zzet/fix/sql-multi-statement-table-extraction
  • 92386d5 Merge pull request #381 from zzet/fix/daemon-control-rpc-latency
  • 34d1ab2 Merge pull request #382 from zzet/fix/lsp-workspace-from-tracked-repo-root
  • f44a049 Merge pull request #383 from zzet/fix/workspace-config-reload-and-per-repo-guards
  • 903194e Merge pull request #384 from zzet/feat/rust-parser-coverage
  • 36b1aab Merge pull request #385 from zzet/fix/mcp-daemon-request-liveness
  • cbeddc9 Merge pull request #386 from zzet/feat/php-parser-coverage
  • e979ea1 Merge pull request #387 from zzet/feat/php-namespace-identity
  • 9e11c53 Merge pull request #388 from zzet/fix/review-pack-coverage-evidence
  • da12c84 Merge pull request #389 from zzet/feat/php-property-assignment-typing
  • f1a74cb Merge pull request #390 from zzet/fix/batch-receipt-publish-owns-storage
  • b7595cd Merge pull request #391 from zzet/feat/python-parser-coverage
  • 0e9b3a7 Merge pull request #392 from zzet/fix/gomlx-long-input-truncation
  • 010c89a Merge pull request #394 from zzet/fix/ollama-tokenize-eof-retry
  • 1d1a821 Merge pull request #395 from zzet/fix/analyze-workspace-scoping
  • c8f33e9 Merge pull request #396 from zzet/refactor/always-prefix-repo-node-ids
  • abb4108 Merge pull request #398 from zzet/fix/pin-divergent-default-fallback-slo
  • e36a06d Merge pull request #399 from pbednarcik/feat/csharp-hangfire-jobs
  • 9088e46 Merge pull request #400 from zzet/fix/qual-name-repo-scope
  • 400404e Merge pull request #401 from pbednarcik/feat/csharp-namespace-aware-refs
  • 9611002 Merge pull request #402 from zzet/codex/localization-quality-pipeline
  • 7a7fd3c Merge pull request #403 from zzet/fix/trigram-idle-eviction
  • 74d2296 Merge pull request #404 from peterkc/fix/streamable-session-recovery
  • e37a46b Merge pull request #405 from zzet/refactor/modern-full-reconciliation
  • 2a42f0c Merge pull request #406 from zzet/perf/framework-census-identities
  • 8c3b9cc Merge pull request #407 from zzet/perf/framework-edge-identity-keys
  • 9f2d484 Merge pull request #408 from zzet/refactor/repository-mutation-coordinator
  • 4472261 Merge pull request #409 from tiendungdev/fix/passive-checkpoint-skipped-not-incomplete
  • f69db52 Merge pull request #410 from tiendungdev/fix/route-registration-vs-handler-site
  • 23712e2 Merge pull request #411 from tiendungdev/fix/bundle-package-key-separator
  • 6d97beb Merge pull request #413 from pbednarcik/fix/workspace-config-defaults
  • 07f9e71 Merge pull request #414 from zzet/perf/sqlite-substring-fallback
  • b49b8a6 Merge pull request #415 from tiendungdev/fix/test-sidecar-handles-leak-on-windows
  • d62ceee Merge pull request #416 from pbednarcik/fix/search-postfilter-escalation
  • e1bd636 Merge pull request #417 from zzet/perf/sqlite-rawbytes-metadata-scans
  • 7922b69 Merge pull request #420 from zzet/perf/resolver-node-projections
  • 65a1c45 Merge pull request #421 from zzet/perf/bounded-attribution-reindex-batches
  • dab5821 Merge pull request #422 from zzet/perf/poller-mtime-ownership
  • d9c31cc Merge pull request #423 from zzet/perf/release-consumed-warmup-snapshots
  • 964765a Merge pull request #424 from zzet/perf/warm-reconcile-authoritative-census
  • b4a32e9 Merge pull request #425 from zzet/perf/shared-parse-memory-admission
  • 309762a Merge pull request #426 from zzet/perf/reuse-clone-corpus-baseline
  • 9649ba1 Merge pull request #427 from zzet/fix/indexer-coordinated-cross-repo-resolve
  • 948cb75 Merge pull request #428 from zzet/perf/resolver-shared-edge-census-v2
  • 8cafea7 Merge pull request #429 from zzet/perf/poller-receipt-rotations
  • eba90b2 Merge pull request #438 from tiendungdev/fix/windows-path-separator-node-split
  • 2bb0b43 Merge pull request #440 from zzet/dependabot/github_actions/actions-minor-patch-478b1c0e64
  • 8741e1d Merge pull request #442 from dsh971/feat/terraform-contract-provider
  • 5b2acd9 Merge pull request #443 from zzet/perf/balanced-cold-index-pipeline
  • 45f0483 Merge pull request #444 from dsh971/feat/terraform-contract-provider-v2
  • 5401482 Merge pull request #445 from zzet/fix/review-rulepack-changed-file-join
  • 051eba2 Merge pull request #446 from zzet/fix/gitignore-layering-below-git-root
  • fc6d62d Merge pull request #447 from zzet/fix/java-method-reference-edges
  • c27381d Merge remote-tracking branch 'origin/main' into fix/localization-answer-fidelity-only
  • 39e6231 Merge remote-tracking branch 'origin/main' into perf/framework-edge-identity-keys
  • 418cfbe Mint the PHP declaration forms the member walk skipped
  • 6ae0ff5 Narrow the .NET DI registration prefilter to lifetime literals
  • 08c90a5 Normalise graphRelPath to the graph's node-ID path spelling
  • 8108bfd Pin the divergent-default fallback SLO in the tests that assert its result
  • 96bdf6e Pin the two surviving meanings of an empty repo prefix
  • 630e5b5 Re-read every per-repo .gortex.yaml on config reload
  • cb6b21e Recognise migration paths with native Windows separators
  • a7a5b72 Record how Rust types acquire their traits
  • ff8f12b Relocate controller-hierarchy pass to entrypoints, invert the walk
  • b1f1c71 Report Rust trait members with the visibility they actually have
  • 9280bde Report repo-prefix ownership instead of failing silently
  • f00d803 Resolve NodeNext emitted-JavaScript import specifiers to their TS source
  • fb267fd Resolve emitted-JavaScript specifiers in the re-export barrel walk
  • d2845fe Resolve guard rules per repo instead of from the daemon's own config
  • 4d2f497 Revert "docs: specify generic localization quality gates"
  • 6fa6781 Revert "fix(localization): stop one file from describing the whole neighbourhood"
  • 78e7bf1 Scope the audit_health report to the caller's workspace and repo
  • 0a90b73 Scope the schema audit's worktree skip to the repo-relative path
  • 07ae968 Stop Rust type references resolving to targets that cannot exist
  • c44b184 Stop a same-directory guess from stealing an inherited PHP call
  • 7328035 Stop dropping C# reference forms for type names in caseless scripts
  • 81c3851 Stop minting unbindable PHP call targets; lower new to a constructor call
  • cf944cb Stop the likely_unused caveat from asserting a symbol is safe to remove
  • 4ebeb02 Stop the review headline blaming the index for coverage it never evaluated
  • e85e770 Stop treating prefix-less nodes as a second repository
  • df5713c Type PHP call receivers so member calls bind to the right method
  • dd17b3f Type Python call receivers from self, cls and annotated parameters
  • 71df4dc Type an intersection receiver by its first branch
  • 2f35c12 Type an untyped PHP property from what the class assigns it
  • f4e2346 Type self:: and static:: member accesses by the enclosing class
  • 954ce29 Warn that the DI binding key is not reserved graph-wide
  • bf347ef chore(goanalysis): remove dead compatibility helpers
  • 28c48d7 chore(indexer): remove superseded merkle wrapper
  • b85632d chore(resolver): remove superseded Java dispatch wrapper
  • 6d49809 chore(resolver): remove superseded cross-repo wrapper
  • 1fa79bb chore: drop the CONTRIBUTORS.md entry from this PR
  • a679da2 ci(deps): bump github/codeql-action/upload-sarif
  • 2007f7a ci(deps): bump the actions-minor-patch group with 3 updates
  • fb3d457 claudecode: call the shared instructions-dir resolver directly
  • 3e6d453 codex: install a standing rule block and flag untrusted hooks
  • 1e8a36a deps(deps): bump the go-minor-patch group with 2 updates
  • bda4eb5 docs(csharp): tighten namespace-narrowing comments
  • 9fe2478 docs(indexer): fix doc-comment misattribution on isInfraOriginConfigKey
  • c838ad9 docs(mcp): clarify stale session POST behavior
  • bf7ea71 docs(mcp): clarify streamable session headers
  • 2e4f7bd docs(mcp): state the request-lifetime guarantees
  • 8a4fcb1 doctor: drop the unused half of the ambiguity check
  • b0692bf doctor: promote to a top-level verb and give it runtime evidence
  • 7bae806 doctor: report every agent, not just Codex
  • 3060205 doctor: report the machine the user has, not every adapter that exists
  • 7607a2b doctor: reserve ✗ for real gaps, not for optional absent files
  • 1242f38 doctor: tell "did not run" from "cannot tell", and make --redact work
  • a37707c feat(contracts): add Terraform Lambda env vars as cross-repo contract providers
  • 88ac9df feat(csharp): DI binding edges, partial-class merge, and ASP.NET entry points
  • 9dfd281 feat(csharp): qualified type spellings carry their namespace evidence
  • 1fe980e feat(hcl): emit config-key graph nodes for Terraform-declared values
  • e08ae39 feat(indexer): add per-repository mutation coordinator
  • 82ffd88 feat(indexer): allow terraform-origin config keys through the strip gate
  • 1e07c3e feat(localization): hand back the best candidates before the answer is proven
  • 5f4b4ff feat(resolver): enclosing namespaces outrank usings in C# narrowing
  • c9846b9 feat(resolver): namespace-aware C# type-reference disambiguation
  • 0ffad38 fix(analysis): normalise graph paths before taking their directory
  • ae579ba fix(config): layer .gitignore from the git root down to the tracked root
  • 2ba1f08 fix(config): seed workspace configs with defaults before unmarshal
  • 7717c93 fix(config): serialize concurrent repository updates
  • dcde5e8 fix(csharp): harden namespace narrowing against review findings
  • b1fb809 fix(csharp): stamp scope_ns for C#10 file-scoped namespaces
  • e231b78 fix(daemon): bound the control plane so a busy daemon cannot hang the CLI
  • 348cd7e fix(daemon): fail closed when warmup recovery fails
  • 0f2b024 fix(daemon): remove ineffectual snapshot clears
  • 3220ba9 fix(daemon): stop control RPCs from stalling behind the indexer
  • 4f55b7e fix(embedding): bound Ollama API batch size
  • 7b559b9 fix(embedding): enforce token budgets after truncation
  • bfdb529 fix(embedding): recover from Ollama tokenizer EOF
  • 3aff127 fix(embedding): satisfy error string lint
  • 30fbf01 fix(excludes): keep Visual Studio and MSBuild artifacts out of the index
  • 143b4a0 fix(goanalysis): make compiler release crash safe
  • 8f8508c fix(graph): scope duplicate qualified names
  • 08ecb03 fix(graph): scope prefix audit to repository sources
  • 954dfc4 fix(indexer): a route's file and line must describe the same site
  • 7d21348 fix(indexer): coordinate cross-repo mutation resolution
  • 9bb7685 fix(indexer): evict idle trigram caches on deadline
  • ac9df5b fix(indexer): evict present-but-excluded files on reindex
  • 5d5df93 fix(indexer): guard lazy clone mutations
  • 7f99d26 fix(indexer): harden generated parser projection
  • 8d2be83 fix(indexer): key the file-delta path the way the cold walk does
  • e359f12 fix(indexer): order batch admission before repo lanes
  • ecd7bd3 fix(indexer): preserve bounded admission throughput
  • 1cc1954 fix(indexer): preserve bounded repository parallelism
  • 23a8894 fix(indexer): read handler source from the symbol, not the contract's path
  • 32d4ff6 fix(indexer): release native parse memory at quiescence
  • 503b709 fix(indexer): retain raw admission across parse timeout
  • b61d00b fix(indexer): saturate memory admission estimates
  • 5b3320e fix(indexer): serialize repository mutation pipelines
  • 0869656 fix(java): capture method references in field and static initializers
  • 374a2e8 fix(java): index Type::new and qualified method references
  • 1518d62 fix(localization): ask for an answer instead of demanding a recital
  • fd6b63b fix(localization): authenticate terminal evidence
  • 02c01d9 fix(localization): complete on the first call when the ranking is ready
  • df820ae fix(localization): give back the unproven page last, not first
  • f150d45 fix(localization): hand back the answer when a terminal call is refused
  • 62ba946 fix(localization): keep every terminal payload under its projection
  • bc9dfef fix(localization): keep production and compact values in the head slots
  • a1a93bb fix(localization): keep single-result sessions open
  • 6b092d0 fix(localization): keep the evidence beside the answer on terminal pages
  • c848c36 fix(localization): match a request against the identifier that joins its words
  • 1acc297 fix(localization): present every retained row in the terminal answer
  • d534d47 fix(localization): rank a wrapper's own implementation above its siblings
  • 6de1f03 fix(localization): render the terminal answer for the request and ask for it verbatim
  • fb10666 fix(localization): replay terminal evidence deterministically
  • 0df0449 fix(localization): require the request's lead before completing unproven evidence
  • c2ef77b fix(localization): retain trusted terminal evidence
  • bc7675f fix(localization): retire a prescribed read whose answer is already packed
  • 6a0248a fix(localization): ship the prescribed body instead of asking for it
  • ef10602 fix(localization): state the emit contract where every host reads it
  • d1f6573 fix(localization): stop advising a call the same turn will refuse
  • 89528ca fix(localization): stop one file from describing the whole neighbourhood
  • 10ce06b fix(localization): stop the terminalizing call from evicting its own answer
  • 4022459 fix(localization): trust current terminal evidence
  • 55cb93e fix(lsp): root language servers at the tracked repo, not the daemon cwd
  • c630352 fix(mcp): align session transport with spec
  • 7ba1e63 fix(mcp): answer a read operation named in the singular
  • c269fec fix(mcp): enforce stale session rejection semantics
  • 44f7dc9 fix(mcp): give every tool, resource, and prompt a request deadline
  • 16064d1 fix(mcp): let a published batch receipt own its storage
  • 9c1c27f fix(mcp): recover expired streamable sessions
  • 02d8789 fix(mcp): refetch deeper when post-filters empty the search page
  • d678d60 fix(mcp): sanitize transport dispatch errors
  • 4d39986 fix(mcp): suppress notification error replies
  • 2470a94 fix(mcp): validate coordinated reindex outcomes
  • 7e3de46 fix(mcp): validate stale request envelopes
  • 4bc2d39 fix(parser): relieve pressure after releasing trees
  • 9a7beac fix(paths): package identity is slash-only, not filepath-shaped
  • fa5cea5 fix(resolver): bind an overloaded method reference to the whole overload set
  • 787255e fix(resolver): preserve builtin workspace labels
  • 91787c4 fix(resolver): recover interrupted durable passes
  • 82b35e3 fix(resolver): retain interrupted tail state
  • 71b7027 fix(review): exempt test files from the coverage debt
  • 0252166 fix(review): join changed files to prefixed graph paths
  • 3d0afe7 fix(search): escalate to the cursor window, honour scoped-zero answers, dedupe capped depths
  • aba0cb3 fix(search): gate the backend on the authoritative corpus size, not the process-local delta
  • b6da50f fix(search): harden against review findings — memoised corpus gate, cap-piercing escalation, scoped-empty sentinel, tier-0 pins
  • eb45b1d fix(search): keep container exact-name hits from eclipsing the FTS tier
  • 4523cc5 fix(search): repo-scope the symbol FTS query so cross-repo floods cannot starve scoped searches
  • ad83ae8 fix(search): restore persisted FTS readiness
  • ebceb28 fix(semantic): keep external apply receipts exact
  • 74a0256 fix(sqlite): preserve reverse reindex receipts
  • 2421e3a fix(sqlite): retain resolved-edge receipt frontiers
  • e21ed87 fix(store): a passive checkpoint that never ran is not incomplete
  • a050846 fix(store): separate acquiring the writer from running the checkpoint
  • cd7afad fix(store_sqlite): name incomplete mutation receipts
  • c0ad5d4 hooks: attribute Stop diagnostics to the session that made the edits
  • c7efbd1 hooks: attribute the invocation log to the agent that ran it
  • d42bfd8 hooks: guard writes of indexed source through the shell door too
  • 61771e1 hooks: say what the Stop diagnostics actually measured
  • 1ba9dfe hooks: stop silencing the tools the hooks actually call
  • 359a804 indexer: report the repo's file count, not the last batch's
  • a0fc51f languages: decline custom grammars in static builds instead of crashing
  • 130efc3 mcp: honor the compact contract the Stop hook already asks for
  • e387953 mcp: keep the prescribed read's declaration primary
  • 9283139 mcp: let a reserved localize outlive an advisory release
  • fa08aab mcp: preserve localization evidence and honest terminality
  • 45c3abd measure: hold first-call terminality, keep the evidence and answer fixes
  • 7cb43dd parser: end a macro definition on its own last line
  • 75180f7 parser: tighten declaration ownership ranges
  • 2fbc3f6 perf(analysis): reuse dense betweenness scratch
  • 75e3868 perf(analysis): trust empty crossing aggregates
  • 78d864b perf(blame): cache repository path normalization
  • a57a7e9 perf(clones): finalize signatures without shingle rewrites
  • 72b5d38 perf(clones): remember authoritative empty corpora
  • 83951ab perf(cochange): batch persisted edge writes
  • 728317f perf(cochange): query only file nodes
  • a85120c perf(contracts): skip irrelevant Go endpoint lookups
  • 2567d25 perf(daemon): defer status graph scans during warmup
  • 22a0f20 perf(daemon): elide completed fallback cross sweep
  • 0af60f2 perf(daemon): elide duplicate cross-repo warmup sweep
  • 5146cc5 perf(daemon): elide redundant warm global sweep
  • 2dce5f1 perf(daemon): keep warm restart deltas file-scoped
  • fc56b7a perf(daemon): make cold enrichment overlap opt in
  • 6cbafa4 perf(daemon): make health snapshots query-free
  • 9f46889 perf(daemon): release consumed warmup snapshots
  • fcf29b4 perf(daemon): skip redundant post-slug resolve
  • decca81 perf(goanalysis): release compiler admission before apply
  • 2bff78b perf(goanalysis): release compiler graph before apply
  • 0623e6e perf(goanalysis): remove redundant full apply serialization
  • c601ddc perf(goanalysis): scavenge released compiler heaps
  • 6bda28b perf(goanalysis): serialize full graph apply
  • e901ff5 perf(goanalysis): slice graph mutation locks
  • 56716e5 perf(graph): add resolver storage projections
  • 93efaa7 perf(graph): batch full edge scans by kind
  • 1680c94 perf(indexer): batch warmup topology generation
  • dbd768a perf(indexer): bound initial cross-repo resolution
  • 8784c07 perf(indexer): bound large shadow drain pressure
  • 1a346d5 perf(indexer): bound poller receipt verification
  • 4e5bca0 perf(indexer): bound source metadata windows
  • 9d9bedb perf(indexer): clear flushed parse batch pointers
  • 789bc52 perf(indexer): complete deferred cross-repo catch-up
  • 976a0c7 perf(indexer): defer shadow eviction until drain
  • efc9a47 perf(indexer): defer source line materialization
  • d4c827d perf(indexer): distinguish absent derived fingerprint sides
  • 20144ea perf(indexer): drain go.mod contracts before bulk seal
  • 506b0c0 perf(indexer): drive test edges from test sources
  • 3ee3262 perf(indexer): ignore builtin-only workspace stamps
  • ab49be3 perf(indexer): keep legacy invalidation file-scoped
  • 709a2a8 perf(indexer): lazily initialize clone sketches
  • a42e07d perf(indexer): narrow workspace slug escalation
  • ceb5fda perf(indexer): overlap bounded light direct parses
  • f8baef8 perf(indexer): overlap direct parse and shadow drain
  • ae606e3 perf(indexer): prioritize pressure shadow drains
  • f7d1003 perf(indexer): project cold test-edge inputs
  • 8e6c648 perf(indexer): project generated parser tables
  • f05ff70 perf(indexer): project generated parsers at every size
  • da5f5d5 perf(indexer): project receiver mutation inputs
  • 75e43d9 perf(indexer): queue bounded shadow admission
  • 1bf8d92 perf(indexer): reclaim pressure direct parse heap
  • 00536ed perf(indexer): release cold intern generations
  • cb2885e perf(indexer): release direct parse heap without cooldown
  • d4c1961 perf(indexer): release large direct parse heap
  • ad7d5ec perf(indexer): relieve native pressure after tree release
  • 66bf580 perf(indexer): restore memory-first cold admission
  • f4c6226 perf(indexer): reuse clean reconcile census
  • 8cee85b perf(indexer): reuse finalized clone corpus baseline
  • 7861189 perf(indexer): reuse proven-empty clone baseline
  • 8fb9a9f perf(indexer): scope GC tuning to admitted work
  • c475d46 perf(indexer): separate native parse admission
  • 824f0ae perf(indexer): serialize full repository parse phases
  • 68059c6 perf(indexer): serialize large direct repository parses
  • c52330e perf(indexer): share immutable mtime snapshots
  • 17ab731 perf(indexer): share parse and drain memory admission
  • 721553f perf(indexer): share parse memory admission across repos
  • 9b3c405 perf(indexer): skip clone offsets without callables
  • c7792e9 perf(indexer): skip unsupported contract source reads
  • 92ea342 perf(indexer): stream capability edge identities
  • ab1a679 perf(indexer): stream cold capability inputs
  • fdf4d38 perf(indexer): track C# hierarchy invalidation
  • ab4dcbb perf(indexer): use full scans for complete census
  • a0d7777 perf(json): count lines without copying source
  • e3d6121 perf(json): retain only emitted key strings
  • 34dc75a perf(localization): bound the conclusion the terminal contract asks for
  • 7855bbd perf(localization): send the terminal answer once
  • 59f8019 perf(mcp): defer whole-graph work through enrichment
  • 4b5bf1b perf(merkle): accept parsed file identities
  • 38b92ff perf(merkle): reuse parsed source hashes
  • 7021911 perf(openapi): reject non-spec sources without copies
  • 92b2456 perf(parser): cap concurrent native C parses
  • 72d7e1c perf(parser): release native C parse high-water
  • c43fdf7 perf(parser): rewind transient tree-sitter arena nodes
  • 1262c8f perf(query): bound substring fallback allocations
  • ed3c523 perf(resolver): avoid broad fn-value prefetch
  • 724bff8 perf(resolver): batch fn-value name lookups
  • dd0300a perf(resolver): batch guard receiver lookups
  • bc43104 perf(resolver): batch module attribution writes
  • 3fd08ba perf(resolver): batch startup applies by pending page
  • e619469 perf(resolver): batch terminal stamp persistence
  • 84eba72 perf(resolver): bound attribution reindex batches
  • 0c755e2 perf(resolver): bound placeholder source reconciliation
  • b6dc267 perf(resolver): cache cold framework projections
  • b23a4f0 perf(resolver): collapse full framework scope
  • ee289a4 perf(resolver): compact go builtin retargets
  • bb853da perf(resolver): deduplicate scoped edges by identity
  • 6faa49f perf(resolver): hydrate framework candidates by identity
  • a1d94b0 perf(resolver): isolate framework pass candidates
  • 952a5ef perf(resolver): key framework edges by identity
  • d011e88 perf(resolver): narrow framework claimant scan
  • d061d99 perf(resolver): page unresolved edges without pre-counting
  • aa3ee54 perf(resolver): preserve exact framework edge lookup
  • 61501c6 perf(resolver): project C# receiver gate calls
  • 285fcb1 perf(resolver): project Go builtin attribution edges
  • f1ae0f0 perf(resolver): project UIKit edge census
  • f7f0a56 perf(resolver): project callback file targets
  • 1a0fa0b perf(resolver): project framework census edges
  • 226d5df perf(resolver): project framework family gate edges
  • 2787cd5 perf(resolver): project full C# dispatch members
  • 91e4ace perf(resolver): project incoming preparation edge identities
  • 217e6e5 perf(resolver): project override dispatch calls
  • bd178c1 perf(resolver): project scoped C# member census
  • 327ff05 perf(resolver): project scoped value candidates
  • 2c458a5 perf(resolver): project unresolved attribution identities
  • 9c29dd0 perf(resolver): project value-ref candidates
  • 76c2fb6 perf(resolver): release framework pass buffers eagerly
  • 3755364 perf(resolver): retarget attribution edges in place
  • cb69671 perf(resolver): reverse-index scoped claiming candidates
  • 45e0bb4 perf(resolver): scope C# call demotion to changed files
  • 30c60f5 perf(resolver): scope framework family gate to changed files
  • 7a9f527 perf(resolver): share UIKit census candidates
  • d4a6428 perf(resolver): share post-bare attribution census
  • 3449cbe perf(resolver): split deferred mutation frontiers
  • d0616d3 perf(resolver): stream C# receiver hierarchy
  • be92085 perf(resolver): target csharp interface dispatch calls
  • 58f5232 perf(resolver): target setstate lifecycle edges
  • 20a2d5b perf(resolver): use compact graph projections
  • 88f4446 perf(resolver): use compact inference projections
  • e8bd479 perf(search): skip native symbol census
  • 6a5c48c perf(search): skip unused ngram census
  • 16ce72a perf(semantic): balance go/types admission by workload
  • 676587d perf(semantic): retain go types admission through apply
  • 9a07435 perf(sqlite): avoid per-row blob copies in cursor scans
  • ac28493 perf(sqlite): back off stalled bulk checkpoints
  • ea5b2fb perf(sqlite): bound cold bulk index deferral
  • cc6be7b perf(sqlite): bound cold finalization work
  • 52d6188 perf(sqlite): bound cold planner finalization
  • 57d8ffe perf(sqlite): coalesce final bulk checkpoints
  • cba655e perf(sqlite): defer coordinated index sealing
  • df81695 perf(sqlite): drain cold-load WAL before resolve
  • cee691d perf(sqlite): localize exact edge refetches
  • fd4d12b perf(sqlite): narrow cross-repo mutation scans
  • 3fbf2c9 perf(sqlite): prevent checkpoint timeout storms
  • 1ae4724 perf(sqlite): restore receiver planner statistics
  • 3b1bed9 perf(sqlite): retain bulk ingest with mutation receipts
  • 859778d perf(sqlite): reuse bounded JSONB ingest buffers
  • ecc52fa perf(sqlite): seek exact edge frontiers by file
  • 09a591b perf(sqlite): skip redundant repository checkpoints
  • 5e0390a perf(sqlite): trim reindex conversion allocations
  • 1b25b73 perf(sqlite): update guard reverts in place
  • 7b88f8b perf(store): bound cold WAL and index work
  • 3b3e227 perf(store): control cold WAL checkpoints explicitly
  • 923e091 perf(store): defer cold index sealing past repo flushes
  • 32c9c1f perf(store): keep contract duplicate receipts exact
  • 20c2fc8 perf(store): retain cold checkpoint writer gate
  • 51568c4 perf(store): update resolved edges in place
  • 546bbc6 perf(store_sqlite): fast path resolved edge conversions
  • 84358f1 perf(store_sqlite): keep enrichment receipts exact
  • 25793cf perf(store_sqlite): keep identity receipts exact
  • 64346af perf(store_sqlite): size edge reindex statements dynamically
  • 4a0eb02 perf(todos): avoid tagless line allocations
  • ac5a8d8 refactor(contracts): simplify Terraform extractor after review
  • c6f98c5 refactor(hcl): simplify config-key extraction after review
  • 2aead0b refactor(indexer): complete modern standalone reconciliation
  • 3ba73ac refactor(indexer): remove dead legacy inference helpers
  • 7c053b8 refactor(indexer): remove legacy reconciliation implementation
  • a60f7ea refactor(indexer): route reconciliation through modern coordinators
  • 7c31e7b refactor(localization): drop a lead check nothing ever consulted
  • 5532fb0 refactor(mcp): narrow expired session recovery
  • 0466e07 refactor(mcp): tighten session recovery boundary
  • 1f7bf6e release: link linux binaries statically so they run on any distro
  • 1d79cc7 resolver: drop the wall-clock ceiling from the LSP pass-budget test
  • 15fbd24 revert(resolver): keep bounded startup apply slices
  • c555bb2 revert: keep resolver recovery out of perf scope
  • 129883d revert: restore measured native pressure timing
  • 8a51fae revert: restore measured native pressure timing
  • dd2df4c savings: price the model generation the dashboard actually sees
  • 62ec0a7 savings: stop attributing one agent's calls to another agent's model
  • 9a81679 test(index-perf): isolate wall-clock regression gate
  • e66c66b test(indexer): align legacy fallback topology expectation
  • d49c39d test(indexer): align mutation revalidation ordering
  • 4e1cc98 test(indexer): cover the monorepo walk end to end
  • c067690 test(indexer): wait for symbol callbacks
  • 0d5395e test(mcp): accept either answer from a call that follows a detached index
  • 8df1c84 test(mcp): release sidecar handles so TempDir can remove them on Windows
  • 42dd41b test(mcp): tighten session transport assertions
  • 5ca38c4 test(persistence): cover CloseSidecar and run it on the Windows job
  • df855b9 test(semantic): wait for the enrich pass to stop instead of polling once
  • 5f64425 test(sqlite): verify resolve-state crash durability
  • 42695dd upgrade: accept update, and make the post-upgrade step testable
  • 2f707b7 upgrade: refresh agent config with the new binary