Skip to content

v0.60.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 19:40
· 50 commits to main since this release
0f24154

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 plugins by @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 ON statements 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

Full Changelog: v0.59.0...v0.60.0