Repository navigation
v0.60.0
What's Changed
- fix(ingestion): stop one file from hanging or exhausting the parse by @RaghavChamadiya in #4738
- fix(update): persist updates for a subdirectory index and scope git rows to it by @Marko0519 in #4195
- feat(plugins): list every plugin registration, load plugin providers, add SeamRegistry.all and PLUGIN_API_VERSION by @RaghavChamadiya in #4741
- docs(plugins): add a plugin author guide, a hello example plugin and a test that keeps it working by @RaghavChamadiya in #4742
- docs(readme): lead with the agent savings, a new hero and plain-English benchmarks by @RaghavChamadiya in #4750
- fix(health): stop flagging flat boolean chains as compound conditions by @RaghavChamadiya in #4754
- fix(health): skip cancellation catches and documented fallbacks in error_handling, state facts in idiom reasons by @RaghavChamadiya in #4755
- fix(server): take the update lock in background syncs and never overwrite newer health rows by @RaghavChamadiya in #4756
- fix(health): stop primitive_obsession on CLI commands, keyword-only and framework-bound parameters, and same-file overrides by @RaghavChamadiya in #4758
- fix(health): name C++ reference, operator, destructor and macro-prefixed functions by @RaghavChamadiya in #4766
- fix(health): skip lock_in_loop when the lock belongs to the loop element by @RaghavChamadiya in #4767
- fix(health): a switch opens one nesting level, its case arms none by @RaghavChamadiya in #4762
- fix(coverage): drop files whose report lines no longer match the source at ingest by @RaghavChamadiya in #4761
- fix(health): count Python pathlib-named calls as file IO only on a path receiver by @RaghavChamadiya in #4764
- fix(health): stop god_class judging one part of a split partial class or a stateless mixin as the whole class by @RaghavChamadiya in #4759
- fix(health): count TSX style objects and data props as markup, not code by @RaghavChamadiya in #4760
- fix(health): stop defer_in_loop and list_insert_zero_in_loop firing when a later statement ends the loop by @RaghavChamadiya in #4768
- fix(health): stop counting abstract, interface and extern methods as function units by @RaghavChamadiya in #4772
- fix(health): make three performance findings say only what the code shows by @RaghavChamadiya in #4773
- fix(health): say what held-back findings deduct in get_health, and describe the change-risk score basis by @RaghavChamadiya in #4776
- fix(code-origin): class parser-generator output as generated and copied single-file libraries as vendored by @RaghavChamadiya in #4784
- fix(health): stop pairing the shared skeleton of sibling files as duplication by @RaghavChamadiya in #4788
- fix(health): keep coverage markers off empty files and code that does not ship by @RaghavChamadiya in #4765
- fix(health): stop sql_select_star on EXISTS and explicit-column sources, skip temp-table DML by @RaghavChamadiya in #4775
- fix(health): repeated_nesting becomes advisory by @RaghavChamadiya in #4757
- fix(health): price refactoring and fix gains by rescoring the file, not summing health_impact by @RaghavChamadiya in #4763
- fix(health): count a match guard once and skip for-each iterables in condition counts by @RaghavChamadiya in #4783
- fix(health): make the headline split add up and mark advisory rows in the CLI findings table by @RaghavChamadiya in #4770
- fix(health): treat extern C signatures as fixed and a condition-variable wait guard as unhoistable by @RaghavChamadiya in #4781
- fix(ingestion): parse C++ classes behind export macros and fields behind thread-safety annotations by @RaghavChamadiya in #4785
- fix(health): scope finding status updates to the requested repository by @jsolemd in #4725
- fix(serve): preserve an explicit REPOWISE_DATABASE_URL by @jsolemd in #4726
- fix(health): give Dart constructors, accessors and operators distinct names and count bare on handlers by @RaghavChamadiya in #4782
- fix(cli): surface broken built-in seam imports in
repowise pluginsby @Asymtode712 in #4748 - fix(ui): keep the Overview header intact while a job runs by @jgt87 in #4735
- feat(salesforce): link flow references from Aura, Visualforce, and Flexipage by @ZhangDT-sky in #4701
- feat(workspace): read Dapr pub/sub topics in .NET and Subscription manifests by @thymeed in #4729
- feat(workspace): read Ktor server routing and Javalin routes as HTTP providers by @ozenyunus35 in #4644
- fix(data): record the schema= keyword on Alembic create_table providers by @Yi-111-a in #4192
- fix(augment): preserve leading dot for dot-directory paths in decision_inject and glob_rescue by @aazminu in #4027
- fix(ingestion): prefer the unique nearest COBOL mapset on ties by @ANO3457 in #4743
- fix(analysis): track brace depth in C# interpolated strings during masking by @ANO3457 in #4625
- fix(cli): persist provider to config.yaml on complete generate (#4280) by @rishu685 in #4344
- fix(analysis): mask Java classes replaced by Mockito doubles (#4345) by @rishu685 in #4579
- feat(workspace): read MyBatis mapper XML and verbatim SQL as table consumers (#4524) by @rishu685 in #4647
- fix(cobol): parse free-format COBOL sources by normalizing column layout (#4454) by @rishu685 in #4722
- fix(init): prune graph edges and nodes absent from a full re-index (#4406) by @Aman-goel-04 in #4510
- fix(git): run index_repo setup off the event loop (#4275) by @Aman-goel-04 in #4395
- perf(init): time the security scan and change rebuild inside the resume checkpoint, scan off the event loop (#4276) by @Aman-goel-04 in #4393
- fix(test_reach): JS/TS mock masking accepts configured vi.fn() and vi.hoisted values (#4348) by @Aman-goel-04 in #4392
- fix(agents): report unknown login state, honour network-off switch by @Aman-goel-04 in #4731
- fix(health): flatten ternary dispatch chains across seven languages by @crown-sports in #4709
- fix: resolve duplicate Apex coverage by package priority by @RajjBhardwaj in #4736
- fix(decisions): correct refusal guidance by @MvMSOLO in #4719
- feat(workspace): read Rails, Sinatra and Grape routes as HTTP providers (#4514) by @rishu685 in #4739
- fix(workspace): skip JPQL entity queries in Java and Kotlin (#4512) by @littfed in #4533
- fix: use harness-neutral wording in agent prompts (fixes #3430) by @juliasadler in #4343
- fix(health): reword stale_governance text to match what the finding c… by @macholul in #4391
- docs: add Simplified Chinese README (README.zh-CN.md) by @ENCHIGO in #4749
- fix(status): surface a broken repository/path mapping as invalid by @sloemo01 in #1812
- feat(web): add a collapsible code graph tree with per-file imports by @sloemo01 in #2343
- feat(workspace): surface supporting evidence for cross-repo co-change pairs (#483) by @sloemo01 in #2041
- fix(api): serialize response datetimes as UTC by @justonemorenight in #2220
- feat(generation): folder-specific documentation floors (#633) by @sloemo01 in #2040
- docs: add internal subsystems and plugin slash commands reference by @akshatmalik-bruh in #2090
- fix(health): production_average leaves out tooling, vendored and generated files on every surface by @RaghavChamadiya in #4771
- fix(health): stop string_concat_in_loop firing on += onto the loop's own element by @RaghavChamadiya in #4769
- fix(files): pin a file's doc, scoped to its repository (groundwork for #812) by @sloemo01 in #2110
- fix(generation): emit file pages for test infrastructure, fixtures, and e2e helpers (#1497) by @Nithin0620 in #2018
- fix(init): attribute page failures to the current generation by @lntutor in #1099
- feat(embedding): apply asymmetric query/document prefixes to embed calls by @NullSense in #1858
- fix(costs): price mistral/ministral in estimator and live tracker by @Ayush7614 in #1803
- fix(generation): persist a subject reuse key so interrupted runs can be topped up (#1089) by @sloemo01 in #1961
- fix(graph): resolve a Python alias of an imported name to its definition by @swati510 in #4812
- fix(graph): keep a rebound Python class or function as its own symbol by @swati510 in #4813
- fix(ingestion): stop C++ attribute and namespace macros from hiding declarations by @swati510 in #4814
- fix(graph): resolve a typed C++ receiver to the base-class method it inherits by @swati510 in #4815
- fix(graph): keep self edges for recursive calls by @swati510 in #4816
- fix(graph): name the class, not Class, as the parent of an out-of-line C++ template member by @swati510 in #4817
- fix(graph): give same-shape C# overloads their own nodes and choose them by what each argument can convert to by @swati510 in #4818
- fix(graph): place Lombok accessors where javac does and type their returns by @swati510 in #4819
- fix(graph): give Java record accessors a return type so chains through them resolve by @swati510 in #4820
- fix(graph): bind C# new X() to a type another namespace declares by @swati510 in #4822
- feat(graph): type C++ calls on member fields from the class declaration by @swati510 in #4825
- fix(graph): keep std:: and free-function C++ calls off same-named repo members by @swati510 in #4826
- fix(graph): give C++ calls through this a call site by @swati510 in #4828
- fix(graph): never bind a Kotlin member call to a property of the same name by @swati510 in #4829
- fix(graph): type a Kotlin extension's implicit receiver properties by @swati510 in #4830
- fix(graph): resolve a Java Outer.Inner.m() receiver by its whole type path by @swati510 in #4835
- fix(graph): choose Java overloads by class literal, concatenation and lambda shape by @swati510 in #4821
- fix(graph): type C# PascalCase property and field receivers from the enclosing class by @swati510 in #4823
- fix(graph): draw a self edge for bare and self-receiver recursion by @swati510 in #4824
- fix(graph): pair a C/C++ prototype with its definition member by member by @swati510 in #4827
- feat(graph): keep a Lombok @SuperBuilder chain going through inherited builder methods by @swati510 in #4837
- test(graph): expect a self edge for C recursion through a prototype by @swati510 in #4861
- fix(graph): pick a Kotlin overload by the exact type of its arguments by @swati510 in #4831
- fix(graph): keep each call on a shared line as its own call site by @swati510 in #4838
- feat(graph): resolve C++ member calls to the class's header members and its bases by @swati510 in #4839
- fix(graph): bind a Java call on an unnamed object only by repo-wide uniqueness by @swati510 in #4836
- fix(graph): read Kotlin calls under a unary operator or on a string literal by @swati510 in #4840
- fix(graph): give Kotlin data class and enum synthetic methods a readable return type by @swati510 in #4841
- chore(upgrade): bump PARSER_SCHEMA_VERSION to 11 for the call-graph accuracy batch by @swati510 in #4862
- docs: lead accuracy with compiler-graded results per language by @RaghavChamadiya in #4863
- test(graph): expect a self edge for C++ recursion through a header declaration by @swati510 in #4866
- feat(web): translate the overview page and architecture map for zh-CN by @RaghavChamadiya in #4882
- docs(readme): show the Chinese dashboard in the zh-CN README by @RaghavChamadiya in #4885
- fix(update): stale pages the run cannot regenerate no longer force a full rebuild by @RaghavChamadiya in #4888
- fix(update): build the same graph nodes and co-change edges as init by @RaghavChamadiya in #4896
- perf(persist): reconcile graph edges by diff instead of delete-and-reinsert by @RaghavChamadiya in #4895
- perf(dead-code): skip symbol nodes in the file passes and scan sources once per token by @RaghavChamadiya in #4898
- perf(communities): run Leiden on graspologic's native core without importing graspologic by @RaghavChamadiya in #4886
- perf(test-routes): stop re-unparsing and re-reading files when judging conftest routes by @RaghavChamadiya in #4887
- perf(git): reuse the deep commit walk and fix shapes across updates by @RaghavChamadiya in #4889
- perf(health): key the walk and token caches on their own code, not the analyzer stamp by @RaghavChamadiya in #4890
- perf(health): splice duplication pairs when the window budget cut the run by @RaghavChamadiya in #4897
- perf(update): scan the commit-health backlog in a background process after update returns by @RaghavChamadiya in #4891
- perf(graph): reuse betweenness on mid graphs and PageRank on unchanged ones by @RaghavChamadiya in #4892
- perf(graph): score sampled betweenness on the process pool by @RaghavChamadiya in #4893
- fix(cli): embed config-rebuilt template pages once by @HengYangDS in #4881
- feat(docs): start-here path, code reference split, fast tree search and page ask in the reader by @RaghavChamadiya in #4904
- fix(mcp): full_doc serves page bodies and symbol pages, sharper concept retrieval, honest answer confidence by @RaghavChamadiya in #4905
- refactor(wiki): remove the retired layer_page type by @RaghavChamadiya in #4907
- fix(generation): plain module page openings, importance-ranked flows, grounded onboarding by @RaghavChamadiya in #4906
- feat(upgrade): rebuild the wiki once when an upgrade reorganizes it by @RaghavChamadiya in #4911
- fix(docs): order layer rows in the docs tree by the stored page order by @RaghavChamadiya in #4915
- perf(update): time each stage of the repo-wide health re-score by @RaghavChamadiya in #4916
- feat(wiki): cite line ranges and link them to the source at the indexed commit by @RaghavChamadiya in #4908
- fix(wiki): order chapters for a reader, nest them by directory, and title them honestly by @RaghavChamadiya in #4913
- fix(wiki): keep api, infra and cycle pages true to the code on every run by @RaghavChamadiya in #4912
- feat(wiki): add flow pages that walk one operation end to end by @RaghavChamadiya in #4909
- feat(update): products sink, no-fallback mode and whole-repo health rescore for single-repo update by @RaghavChamadiya in #4914
- fix(ui): cast the citations test page through unknown so the ui type check passes by @RaghavChamadiya in #4923
- fix(wiki): rank spotlights by symbol use and drop boilerplate from structural pages by @RaghavChamadiya in #4918
- perf(server): read page summaries as columns, not full pages by @RaghavChamadiya in #4920
- perf(mcp): stop holding search results for a slow vector leg by @RaghavChamadiya in #4922
- perf(init): write each batch of generated pages with one query by @RaghavChamadiya in #4921
- perf(update): fold the refactoring queue once per health re-score by @RaghavChamadiya in #4917
- perf(health): memoize context-free test-path and language-family lookups by @RaghavChamadiya in #4925
- perf(health): keep skipped files' walks cached after a changed-files pass by @RaghavChamadiya in #4926
- fix(update): keep neighbour pages' git history when an update re-renders them by @RaghavChamadiya in #4919
- fix(search): keep full-text scores positive for terms common to most pages by @RaghavChamadiya in #4928
- perf(health): splice whole-repo duplication runs on the files that moved by @RaghavChamadiya in #4927
- feat(upgrade): rebuild the reorganized wiki once on the first update by @RaghavChamadiya in #4930
- fix(history): stop other files' renames widening a file's churn by @RaghavChamadiya in #4939
- fix(dead-code): measure git age from the indexed commit, not the wall clock by @RaghavChamadiya in #4940
- fix(kotlin): recover class bodies the grammar loses to three misparsed spans by @RaghavChamadiya in #4941
- feat(kotlin): resolve super.m() calls through the caller's supertypes by @RaghavChamadiya in #4942
- feat(kotlin): resolve calls on field paths like a.b!!.c.m() by @RaghavChamadiya in #4943
- fix(dead-code): hold the public API of Go, Rust, JVM, Python and npm libraries below the review floor by @RaghavChamadiya in #4944
- refactor(dead-code): make zombie packages and unused internals review-only by rule by @RaghavChamadiya in #4945
- fix(rust): resolve use crate::Item to the crate root file by @RaghavChamadiya in #4947
- fix(java): keep a String or boxed argument off overloads it can never reach by @RaghavChamadiya in #4950
- fix(java): bind a static import to the member of the type it names by @RaghavChamadiya in #4951
- feat(kotlin): resolve typed receivers to members their type inherits by @RaghavChamadiya in #4952
- feat(cpp): type receivers from fields a base class declares by @RaghavChamadiya in #4953
- fix(cpp): pair declarations with generated sources, not their templates by @RaghavChamadiya in #4954
- feat(csharp): resolve typed receiver calls to methods a base type declares by @RaghavChamadiya in #4955
- feat(csharp): type foreach loop variables from the collection they walk by @RaghavChamadiya in #4956
- feat(csharp): type var locals from the declared return type of the call by @RaghavChamadiya in #4957
- fix(java): keep JDK method names off the repo-wide unique-name guess by @RaghavChamadiya in #4958
- feat(rust): resolve method calls through self.field receivers by @RaghavChamadiya in #4946
- feat(kotlin): resolve infix calls as member calls by @RaghavChamadiya in #4949
- fix(java): keep an array argument off overloads it can never reach by @RaghavChamadiya in #4959
- fix(workspace): close repository indexes when opening is cancelled by @jsolemd in #4728
- fix(mcp): warn that --transport sse is deprecated by @sloemo01 in #4910
- fix(security): do not flag Windows manifest publicKeyToken as hardcoded secret (#4924) by @ANO3457 in #4936
- fix(security): deduplicate public_env_secret when credential pattern matches line (#3995) by @rishu685 in #4902
- fix(dead-code): root Camel route builders, JAX-WS endpoints and web.xml classes (#4466) by @dchaudhari7177 in #4620
- fix(health): count the branch that is a function's whole expression body by @Aman-goel-04 in #4833
- fix(ingestion): keep inferred stdlib shadows external by @HengYangDS in #4937
- fix(generation): deduplicate module excerpt identities before the cap by @HengYangDS in #4938
- fix(wiki): preserve retired pages and their history by @HengYangDS in #4929
- fix: record Java method modifiers by @iamcipherdev in #4876
- fix: refuse ambiguous C# constructed type calls by @ZhangDT-sky in #4870
- fix(csharp): don't import the alias name of a using alias by @Aman-goel-04 in #4869
- feat(pipeline): add index persistence seam by @jsolemd in #4780
- fix(decisions): order PR-body candidates by recency and skip mined commits (#4409) by @ANO3457 in #4641
- fix(python): give a property's setter and deleter their own symbol ids by @RaghavChamadiya in #4961
- fix(python): a class nested in a function hides same-named classes elsewhere by @RaghavChamadiya in #4962
- feat(update): safely patch graph for body-only edits by @Marko0519 in #4808
- fix: Python local assignment shadows module-level class for calls by @iamcipherdev in #4877
- fix(graph): bare method calls reach same-file top-level functions by @nosmile99 in #4857
- feat(kotlin): resolve this@Label receivers to the labelled scope by @RaghavChamadiya in #4964
- fix(typescript): stop chained calls on untyped results binding a repo method by name by @RaghavChamadiya in #4966
- fix(why): serve only what answers the question, and name it honestly by @RaghavChamadiya in #4974
- fix(answer): grade correct answers high and non-answers low by @RaghavChamadiya in #4980
- fix(mcp): send agents only the response fields they can act on by @RaghavChamadiya in #4981
- fix(context): stop reporting pages the build retired as deleted files by @RaghavChamadiya in #4932
- fix(generation): stop rejecting pages for plain English about arguments by @RaghavChamadiya in #4931
- fix(security): split git log patches only at real commit boundaries by @RaghavChamadiya in #4751
- feat(kg): serve external systems, containers and technologies on the zoom map, and build it faster by @RaghavChamadiya in #4752
- fix(health): skip every loop-scoped perf finding on a statement the loop ends after by @RaghavChamadiya in #4786
- fix(worktree): stop update's seed refusal from promising a full init by @RaghavChamadiya in #4878
- fix(cli): init inside one repo next to other repos names the workspace command by @RaghavChamadiya in #4883
- fix(cli): workspace init keeps its config and data out of a git workspace root by @RaghavChamadiya in #4884
- fix(cpp): keep bare calls off members of unrelated classes by @RaghavChamadiya in #4967
- fix: bump the security rescan stamp and fix two unstable tests by @RaghavChamadiya in #4988
- fix(mcp): name one upgrade command on no-prose indexes and keep update out of declined editor files by @RaghavChamadiya in #4989
- fix(decisions): mine new commits and PR bodies on repowise update by @RaghavChamadiya in #4991
- fix(decisions): keep stored fields on re-add and reuse confirm evidence by @RaghavChamadiya in #4992
- fix(cli): keep a database locator out of Path, and match the MCP freshness contract by @RaghavChamadiya in #4994
- perf(cli): wire bridged tools without importing the HTTP auth stack by @RaghavChamadiya in #4993
- perf(mcp): keep the stored read views and test masks across processes by @RaghavChamadiya in #5005
- perf(mcp): stop paying a failed embedder's retries on every query by @RaghavChamadiya in #5006
- fix(csharp): choose same-arity overloads by builtin argument types by @RaghavChamadiya in #5009
- perf(change-risk): stop re-reading the same history, graph and base side on every call by @RaghavChamadiya in #5011
- fix(answer): hold a high answer that names one of several definitions at medium by @RaghavChamadiya in #4995
- perf(why): keep the repository rationale harvest beside the index by @RaghavChamadiya in #5010
- perf(impacted-tests): read the import graphs and test placement once per index state by @RaghavChamadiya in #5020
- fix(why): link commits to a decision only when they state it by @RaghavChamadiya in #5021
- feat(mcp): tell the agent to restart a server whose code changed on disk by @RaghavChamadiya in #5013
- fix(decisions): show agents the signed record and accept commands everywhere by @RaghavChamadiya in #5015
- feat(mcp): list every definition of a shared name and outline long documents by @RaghavChamadiya in #5025
- fix(risk): claim a cross-repo link only when an import reaches the file by @RaghavChamadiya in #5026
- fix(answer): retrieve a value set inside a function body and each clause of a compound question by @RaghavChamadiya in #5004
- feat(mcp): list barrels, mirrored definitions and docs in a symbol's edit set by @RaghavChamadiya in #5024
- ci(mcp): gate default tool responses on an indexed fixture, smoke cold start weekly by @RaghavChamadiya in #5028
- test(mcp): re-bless response ceilings after shared-name search listing by @RaghavChamadiya in #5034
- feat(server): pass repo ids, an action and claims to auth plugins by @RaghavChamadiya in #5035
- feat(decisions): read pr_review as a decision source and match quotes past punctuation by @RaghavChamadiya in #5032
- perf(change-risk): keep the range cache when only unrelated refs or branch tips move by @RaghavChamadiya in #5036
- perf(read-snapshots): drop only the views whose inputs a write touches by @RaghavChamadiya in #5038
- fix(persistence): re-point a moved or copied index instead of adding a second repository row by @RaghavChamadiya in #5039
- fix(cli): write .claude/CLAUDE.md and AGENTS.md under init's progress display by @RaghavChamadiya in #5040
- fix(answer): stop grading two kinds of wrong answer high by @RaghavChamadiya in #5041
- perf(git): blame through a scratch changed-path commit-graph by @RaghavChamadiya in #5037
- fix(update): render eligible files that never got a page by @RaghavChamadiya in #5043
- perf(change-risk): select tests while the change is scored and stop fetching symbol edges for the health compare by @RaghavChamadiya in #5050
- fix(answer): grade a correct constant answer high when its verified value line is served by @RaghavChamadiya in #5054
- test(change-risk): pin that a filtered call shares the early test selection by @RaghavChamadiya in #5053
- fix(pipeline): keep one checkpoint job when a phase is announced twice by @RaghavChamadiya in #5055
- fix(ui): render relative times stably through hydration by @RaghavChamadiya in #5058
- perf(mcp): import tool package leaves without their heavy siblings by @RaghavChamadiya in #5060
- fix(answer): retry a synthesis cut at the token cap and hold a cut-off answer at medium by @RaghavChamadiya in #5057
- fix(origin): classify binary file heads by path, not as minified bundles by @RaghavChamadiya in #5064
- feat(rust): type locals from the call that assigns them by @RaghavChamadiya in #4948
- perf(answer): raise the synthesis cap to 4096 and ask thinking models for low effort by @RaghavChamadiya in #5068
- fix(init): keep --no-prose and --no-editor-setup in a seeded worktree index by @RaghavChamadiya in #5069
- perf(change-risk): compare a large change's health in a child process and start it beside the score by @RaghavChamadiya in #5070
- fix(mcp): drop empty overview fields and the fallback layer label from get_context by @RaghavChamadiya in #5072
- feat(hooks): serve an outline when a file's skeleton is over the Read cap by @RaghavChamadiya in #5073
- fix(saved): read the repository ledger when run from a subdirectory by @RaghavChamadiya in #5071
- perf(update): skip the unpaged-file lookup when no file can lack a page by @RaghavChamadiya in #5074
- fix(workspace): a bin-only Cargo crate publishes no library by @rhmatzeka in #4987
- fix(core): classify jscodeshift fixtures as test support by @Pratham2511 in #4810
- fix(mcp): add basis fields for directory health and full_doc in get_context (#4997) by @left-big-toe-of-oppenheimer in #5017
- fix(ingestion): consider arity when ancestor members compete with C# extensions (#4970) by @Kashyap-Acharya in #4985
- feat(pascal): resolve uses per project and type call receivers by @Laex in #4880
- fix(savings): keep a moved or copied repository's savings history by @RaghavChamadiya in #5077
- fix(workspace): a Go route inside a string literal is not an HTTP provider by @florianaltendorfer in #4576
- fix(health): resolve coverage.py dynamic_context dotted test ids to test files (#3597) by @rishu685 in #3880
- fix(dead-code): root Metro and Anvil contributed bindings by @ozenyunus35 in #3923
- fix(update): a moved or copied checkout keeps one repository row (#4225) by @Aman-goel-04 in #4266
- Read literal Terraform service-name and environment claims by @ANO3457 in #4700
- fix(savings): base MCP baselines on what each answer replaces by @RaghavChamadiya in #5075
- fix(parser): do not treat an unexpanded macro's return type as a C++ scope by @lizuyi-6 in #4872
- fix(kotlin): read fun, reified and variance type parameters so they shadow same-named classes by @RagedPanda in #4984
- test(rust): add coverage for crates with neither lib.rs nor main.rs (#4975) by @suyashgitt in #4982
- fix(workspace): normalize gin and echo catch-all segments like /*any to {param} by @deven1003 in #4804
- fix(health): resolve a nested directory in a
module:target by @cf3901646 in #5014 - fix(answer): keep file-name guesses, test helpers and framing verbs out of answer ranking by @RaghavChamadiya in #5076
- fix(answer): read an excerpt that stops short as an admitted gap by @RaghavChamadiya in #5080
- perf(decisions): store the actions view a decision write drops by @RaghavChamadiya in #5081
- fix(hooks): run each hook's entry point from the install that wrote it by @RaghavChamadiya in #5085
- fix(savings): move the ledger when update adopts a moved checkout's row by @RaghavChamadiya in #5086
- feat(init): install the agent hooks by default by @RaghavChamadiya in #5082
- fix(csharp): a type test or cast declares no name of its own by @bfs2021 in #4986
- fix(cli): provide non-interactive guidance for decision add by @r0nik123 in #5019
- fix(health): remove unreachable bodyless markers from C# fixed_signature_markers by @CoDe-ReDz in #4801
- Fix/web security headers by @GitMehdi-sys in #4634
- fix(dead-code): root classic ASP.NET Global.asax classes and System.Web controllers (#4609) by @dchaudhari7177 in #4631
- fix(health): correctly calculate CCN for COBOL
GO TO .... DEPENDING ONstatements by @mazenaly256 in #4618 - fix(graph): resolve C++ receivers through using/typedef aliases by @rubenG1009 in #4879
- fix(health): take the largest arm of C/C++ #if blocks by @Architcybercrime in #4802
- fix(init): acknowledge a first Ctrl-C and stop at the next step by @bercedev in #4315
- fix(vscode): Stabilize VS Code extension smoke test (#3932) by @soumojit-D48 in #5029
- fix(savings): credit nothing for MCP replies that served nothing by @RaghavChamadiya in #5087
- perf(decisions): let the first reader store the actions view, not the decision write by @RaghavChamadiya in #5088
- fix(origin): class a Go file generated when its banner sits below a license header by @deven1003 in #4807
- ci: add windows-smoke job testing cp1252 console encoding (#4273) by @rishu685 in #4594
- fix(csharp): type array locals as arrays, not their element type by @irankunda-Steve in #5008
- feat(doctor): flag plugin and repo-local hooks whose entry point is missing by @RaghavChamadiya in #5089
- fix(doctor): pass the repo path to the provider config check on the resolve path too by @RaghavChamadiya in #4717
- docs(onboarding): guide new and existing users to the tour, Setup and adding a model by @RaghavChamadiya in #4684
- feat(kg): make the knowledge graph an interactive C4 map by @RaghavChamadiya in #4753
- fix(savings): measure the MCP drop in the shape the reply is delivered in by @RaghavChamadiya in #5092
- fix(git): read stored git timestamps back as aware UTC by @RaghavChamadiya in #5091
- Introduce Document Extractor Seam by @digimangos in #5056
- fix(savings): create a missing ledger on demand and never drop savings tables on upgrade by @RaghavChamadiya in #5078
- fix(savings): price MCP savings by warming the rate cache in the background by @RaghavChamadiya in #5079
- feat(kg): show health as a corner score and roles as icons on map cards by @RaghavChamadiya in #5099
- feat(kg): lay the map out by dependency direction and set the test layer aside by @RaghavChamadiya in #5102
- fix(init): never move a global MCP entry that serves another repo by @RaghavChamadiya in #5094
- feat(kg): draw each level's strongest links at rest by @RaghavChamadiya in #5100
- feat(kg): lay out mostly-files folders as grouped health-sorted tiles by @RaghavChamadiya in #5101
- fix(web): point the Setup page's hosted card links at the homepage and /hosted by @RaghavChamadiya in #5106
- feat(workspace): lead the workspace overview with the repositories and fold Do next by @RaghavChamadiya in #5107
- feat(docs): keep Start here short and give walkthroughs their own sidebar group by @RaghavChamadiya in #5108
- feat(ui): give mermaid diagrams a neutral palette and fix the blank system map pill by @RaghavChamadiya in #5111
- feat(ingestion): let document extractors declare a source size ceiling by @RaghavChamadiya in #5110
- fix(health): read every health score on the five canonical bands by @RaghavChamadiya in #5109
- fix(workspace): read the lowest health stat on the five bands after #5109 by @RaghavChamadiya in #5118
- feat(chat): refine the composer with a toolbar row, streaming stop and IME-safe send by @RaghavChamadiya in #5113
- perf(update): patch the graph for one-file edits by default by @RaghavChamadiya in #5095
- fix(mcp): get_context names who made the last change, and matches modules by case by @RaghavChamadiya in #4377
- fix(answer): list every definition of a value named in several files by @RaghavChamadiya in #5120
- fix(mcp): list recursive const-function calls as calls, and keep complete true on a whole reference list by @RaghavChamadiya in #5122
- fix(search): keep semantic hits on the first search of a server process by @RaghavChamadiya in #5121
- fix(init): count file pages against the files selection meant to page by @RaghavChamadiya in #5119
- feat(commits): condense the Commits page to History and Review a change by @RaghavChamadiya in #5112
- feat(decisions): turn the review section into a priority-ordered queue table by @RaghavChamadiya in #5114
- feat(mcp): give get_answer quotes their line ranges and name the get_symbol call for unserved helpers by @RaghavChamadiya in #5124
- feat(mcp): name wrapped imports' module, skeleton fold calls and pageless files in path search by @RaghavChamadiya in #5125
- feat(mcp): list a directory's files and their tests in get_context by @RaghavChamadiya in #5123
- fix(tests): stop a workspace MCP teardown hang and time out hung tests by @RaghavChamadiya in #5139
- fix(change-risk): wait for cancelled helper tasks before the call returns by @RaghavChamadiya in #5148
- fix(init): write the Claude Code MCP entry to ~/.claude.json, where Claude Code reads it by @RaghavChamadiya in #5145
- fix(hooks): run the install that wrote the post-commit hook before PATH by @RaghavChamadiya in #5146
- feat(mcp): accept a worktree or subdirectory path as repo by @RaghavChamadiya in #5130
- fix(mcp): get_answer stops retrying a rejected key and says where to set one by @RaghavChamadiya in #5131
- feat(mcp): get_overview drops embedder_degraded: false like every other tool by @RaghavChamadiya in #5129
- feat(mcp): serve a class field's declaration and assignment when get_symbol misses it by @RaghavChamadiya in #5128
- fix(search): return a small literal match set whole instead of five lines per file by @RaghavChamadiya in #5135
- fix(git): credit no author for a shallow clone's cut commit by @RaghavChamadiya in #5133
- fix(why): store a rationale comment's whole line range by @RaghavChamadiya in #5132
- feat(decisions): reaffirm from the review queue and dismiss candidates in bulk by @RaghavChamadiya in #5117
- feat(mcp): get_why serves the plain comment that states the reason by @RaghavChamadiya in #5136
- fix(answer): keep correct answers high when a caveat is about something not asked by @RaghavChamadiya in #5137
- feat(mcp): point at get_why where an accepted decision governs a target by @RaghavChamadiya in #5140
- feat(mcp): answer a get_why question no decision covers with a compact verdict by @RaghavChamadiya in #5141
- feat(mcp): keep get_change_risk next_actions to what the diff needs by @RaghavChamadiya in #5142
- feat(mcp): steer agents to one question per call and exact follow-up calls by @RaghavChamadiya in #5144
- feat(mcp): one omission entry per response and no scope pointer in _meta by @RaghavChamadiya in #5143
- feat(change-risk): score each commit of a range in one call with per_commit by @RaghavChamadiya in #5138
- test(mcp): re-bless the why_targeted ceiling for the served plain rationale comment by @RaghavChamadiya in #5151
- fix(mcp): serve a small reference set whole instead of three references per file by @RaghavChamadiya in #5149
- feat(mcp): state stale-index warnings as facts, not commands by @RaghavChamadiya in #5150
- fix(answer): ask synthesis for a gap only when it limits the answer to the question by @RaghavChamadiya in #5147
- feat(mcp): get_why quotes the commit body that answers the question by @RaghavChamadiya in #5164
- feat(answer): show synthesis each served body's line range so answers can cite lines by @RaghavChamadiya in #5167
- feat(init): route tasks to Grep or a named Repowise call in the generated CLAUDE.md and AGENTS.md by @RaghavChamadiya in #5168
- perf(mcp): cut the tool list and server instructions sent on every turn by @RaghavChamadiya in #5169
- fix(distill): pass commands through when repowise is not on PATH by @RaghavChamadiya in #5170
- fix(ci): end the unit run when a timed-out worker dies, and log its stacks by @RaghavChamadiya in #5175
- fix(update): advise cascade-budget flag for update bringing changes (#4710) by @rishu685 in #4965
- feat(workspace): read Swagger 2.0 documents as HTTP providers (#4659) by @rishu685 in #5083
- feat(apex): resolve base URL of Apex Named Credential callout (#4448) by @rishu685 in #4901
- fix(cobol): mask XML GENERATE and XML PARSE statements (#4476) by @rishu685 in #4646
- fix(frameworks): rescue Android classes referenced in layout XML and ProGuard keep rules (#3819) by @rishu685 in #4120
- fix(ingestion): recognise quoted types in PEP 695 type aliases, TypeAlias assignments, and generic base classes (#4019) by @rishu685 in #4593
- perf(hooks): cut the hook's import floor and bound its waits on a locked index by @RaghavChamadiya in #5179
- perf(distill): fold diffs to their changed lines and outline large whole-file cats by @RaghavChamadiya in #5178
- feat(blast-radius): pick a change and see its reach drawn, with what to do next by @RaghavChamadiya in #5115
- perf(hooks): stop adding hook bytes the agent does not use, and say when hooks are not running by @RaghavChamadiya in #5173
- fix(hooks): pass a Read through when the file moved since the index, and outline the largest files by @RaghavChamadiya in #5177
- feat(review): run the health check on the change under review by @RaghavChamadiya in #5126
- fix(cli): clarify global MCP entry summary by @Vamsi-2581 in #5162
- perf(change-health): skip refactoring suggestions in revision analysis by @Asymtode712 in #5166
- fix(git): stop counting a shallow clone's cut commit as churn or origin by @RagedPanda in #5172
- fix(test-reach): scope sibling name matches by @HarshithJeevan-pixel in #5171
- fix(search): end evidence snippets on word boundaries by @1AbdullahButt in #5062
- fix(decision): return warnings for missing --affects path or rational… by @mechmaster20 in #5105
- fix(cobol): parse Micro Focus null-terminated Z'...' literals by @canblmz1 in #4501
- fix(ingestion): recover Kotlin statements assigning modifier-named properties (#4969) by @Kashyap-Acharya in #4983
- fix(health): handle C++ macro declarator walks by @ZhangDT-sky in #4805
- fix(persistence): retain page layer metadata during rebuilds by @developerjillur in #4871
- fix(tests): stop calling files untested that a test loads through their own package by @RaghavChamadiya in #5183
- chore(deps): bump pyasn1, qs and litellm for security advisories by @RaghavChamadiya in #5185
- fix(doctor): measure the omission store by the pages it uses, not its file size by @RaghavChamadiya in #5187
- fix(cli): leave .mcp.json out when Claude Code's user-scope entry serves the repo by @RaghavChamadiya in #5189
- feat(review): make Review a top-level page beside Overview and Chat by @RaghavChamadiya in #5127
- fix(web): show the advertised release's notes from the upgrade banner by @RaghavChamadiya in #5191
- test(tests): add a hand-labelled eval set for the untested rule by @RaghavChamadiya in #5192
- fix(distill): route git show of a file at a revision away from the diff renderer by @RaghavChamadiya in #5186
- fix(ui): render a missing date as a mark instead of throwing by @RaghavChamadiya in #5188
- fix(cli): report .mcp.json scope changes accurately after a retire or keep by @RaghavChamadiya in #5195
- fix(tests): credit tests through code that calls a file, and stop calling no-code and new files untested by @RaghavChamadiya in #5196
- feat(generation): shared reader voice for wiki pages and a real default style by @RaghavChamadiya in #5197
- feat(generation): flow pages walk declared operations with every step excerpted by @RaghavChamadiya in #5198
- feat(generation): module pages that map their parts and explain their mechanism by @RaghavChamadiya in #5199
- fix(ui): format figures with the pinned en-US locale everywhere by @RaghavChamadiya in #5059
- feat(generation): write the repository overview for a first-time reader by @RaghavChamadiya in #5200
- fix(generation): walk docs with fs_walk and read doc extensions from support_paths by @RaghavChamadiya in #5203
- fix(generation): take the front page's package files from the shared barrel list by @RaghavChamadiya in #5204
- feat(generation): onboarding pages built from the user path and the walkthroughs by @RaghavChamadiya in #5201
- feat(providers): size page material to a local model's context window by @RaghavChamadiya in #5205
- feat(generation): more walkthroughs for large repos, one per implementation by @RaghavChamadiya in #5206
- feat(generation): onboarding reads Overview, Getting Started, How It Works by @RaghavChamadiya in #5209
- feat(generation): a sidebar that reads as a table of contents by @RaghavChamadiya in #5208
- feat(generation): module pages name themselves for the sidebar in the same call by @RaghavChamadiya in #5210
- fix(tests): give the outline test's fake page rows the nav-title metadata column by @RaghavChamadiya in #5212
- release: v0.60.0, a wiki you read front to back, Review as its own page, a C4 knowledge graph by @RaghavChamadiya in #5211
- fix(deps): cap tree-sitter below 0.26 by @Laex in #5213
New Contributors
- @jsolemd made their first contribution in #4725
- @Asymtode712 made their first contribution in #4748
- @RajjBhardwaj made their first contribution in #4736
- @MvMSOLO made their first contribution in #4719
- @littfed made their first contribution in #4533
- @juliasadler made their first contribution in #4343
- @macholul made their first contribution in #4391
- @ENCHIGO made their first contribution in #4749
- @Nithin0620 made their first contribution in #2018
- @HengYangDS made their first contribution in #4881
- @rhmatzeka made their first contribution in #4987
- @Pratham2511 made their first contribution in #4810
- @left-big-toe-of-oppenheimer made their first contribution in #5017
- @lizuyi-6 made their first contribution in #4872
- @RagedPanda made their first contribution in #4984
- @suyashgitt made their first contribution in #4982
- @deven1003 made their first contribution in #4804
- @cf3901646 made their first contribution in #5014
- @r0nik123 made their first contribution in #5019
- @CoDe-ReDz made their first contribution in #4801
- @mazenaly256 made their first contribution in #4618
- @Architcybercrime made their first contribution in #4802
- @irankunda-Steve made their first contribution in #5008
- @digimangos made their first contribution in #5056
- @HarshithJeevan-pixel made their first contribution in #5171
- @1AbdullahButt made their first contribution in #5062
- @mechmaster20 made their first contribution in #5105
- @canblmz1 made their first contribution in #4501
- @developerjillur made their first contribution in #4871
Full Changelog: v0.59.0...v0.60.0