Skip to content

v0.55.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 04:40
· 1051 commits to main since this release
e829775

What's Changed

  • fix(generation): keep knowledge-graph layer names unique by @RaghavChamadiya in #2725
  • fix(mcp): stop listing the test layer as an architecture layer by @RaghavChamadiya in #2726
  • fix(mcp): share get_context's budget across targets instead of dropping one by @RaghavChamadiya in #2727
  • fix(mcp): return the repo='all' error dict from get_health and the finding tools by @RaghavChamadiya in #2728
  • fix(ui): read the tiered get_dead_code shape in the chat card by @RaghavChamadiya in #2729
  • feat(ui): show the owner's line share and the merge commit count by @RaghavChamadiya in #2730
  • feat(ui): a steps-unavailable state in the opportunity drawer by @RaghavChamadiya in #2732
  • feat(ui): name the worst test file and mark unverified findings by @RaghavChamadiya in #2733
  • feat(present): tell the repository as a short story by @RaghavChamadiya in #2734
  • docs: correct stale MCP tool reference entries and document savings sync by @RaghavChamadiya in #2724
  • perf(mcp): build get_answer's graph projections once per index state by @RaghavChamadiya in #2735
  • fix(mcp): read a typed identifier as one name in get_answer retrieval by @RaghavChamadiya in #2736
  • fix(mcp): answer 'what happens when' questions from the entry's call order by @RaghavChamadiya in #2737
  • fix(persistence): a data step that moves no rows no longer fails the schema upgrade by @RaghavChamadiya in #2738
  • docs: bring the dashboard Architecture and Code Health tab lists up to date by @RaghavChamadiya in #2731
  • fix(mcp): accept get_risk(changed_files=[...]) without targets by @RaghavChamadiya in #2761
  • perf(mcp): read only the targets' graph neighbourhood in get_risk by @RaghavChamadiya in #2763
  • fix(update): stop the first update after init rebuilding every page by @RaghavChamadiya in #2765
  • fix(go): a chained call on an external return type is not a bare-name call by @RaghavChamadiya in #2766
  • fix(go): type a call through a struct field from the field's declaration by @RaghavChamadiya in #2767
  • fix(core): type a nested class's fields and ancestors from its own symbol by @RaghavChamadiya in #2768
  • perf(dead-code): read stored findings instead of re-parsing the repo by @RaghavChamadiya in #2769
  • perf(search): write full-text pages in fixed-size chunks by @RaghavChamadiya in #2780
  • fix(cpp): a static function in another translation unit is not a call target by @RaghavChamadiya in #2770
  • fix(java): record package-private access instead of public by @RaghavChamadiya in #2771
  • fix(typescript): give object-literal methods their own symbol by @RaghavChamadiya in #2772
  • fix(python): resolve super() calls through the MRO, not the file's last same name by @RaghavChamadiya in #2773
  • fix(cpp): a function that returns a pointer or a reference is a symbol by @RaghavChamadiya in #2774
  • fix(core): a parameter or local shadows a bare call's module-level target by @RaghavChamadiya in #2775
  • refactor(actions): build RepoFacts from plain rows in a pure core builder by @RaghavChamadiya in #2752
  • fix(go): type a local from the call that declares it by @RaghavChamadiya in #2777
  • fix(csharp): resolve calls between fragments of a partial class by @RaghavChamadiya in #2776
  • fix(go): type a range loop variable from the container it walks by @RaghavChamadiya in #2778
  • fix(core): resolve a member call once, by its receiver first by @RaghavChamadiya in #2779
  • fix(rust): type a receiver from its annotation or constructor call by @RaghavChamadiya in #2800
  • docs(mcp): list every opt-in tool and stop calling workspace tools automatic by @RaghavChamadiya in #2759
  • docs(languages): match the extension and import-resolution rows to the language specs by @RaghavChamadiya in #2760
  • docs(health): document lazy_load_in_loop, current marker counts and a split_file id limit by @RaghavChamadiya in #2815
  • ci: send unit test coverage to the pull request bot by @RaghavChamadiya in #2809
  • fix(core): give each Java and C# overload its own symbol by @RaghavChamadiya in #2811
  • fix(health): name the opportunity lookup flag found, not resolved by @RaghavChamadiya in #2812
  • fix(cli): read the stored refactoring queue for health --refactoring-targets by @RaghavChamadiya in #2813
  • fix(health): class schema migrations as tooling in the performance context by @RaghavChamadiya in #2814
  • fix(refactoring): credit the share of a finding a plan actually removes by @RaghavChamadiya in #2816
  • fix(perf): a C# task read after it was awaited does not block by @RaghavChamadiya in #2823
  • feat(health): store each file's code origin and per-function dispatch and deprecation facts by @RaghavChamadiya in #2820
  • feat(health): one Fix first queue across defect, maintainability and performance by @RaghavChamadiya in #2821
  • fix(php): a name that only appears in a docblock does not form an import cycle by @RaghavChamadiya in #2824
  • fix(java): refuse a call on a receiver typed to a library class by @RaghavChamadiya in #2827
  • fix(cpp): give each C++ overload its own symbol by @RaghavChamadiya in #2829
  • fix(refactoring): give every plan writer the community labels a full index uses by @RaghavChamadiya in #2830
  • fix(health): keep finding triage across re-index by @RaghavChamadiya in #2819
  • feat(health): rank verification tests by how directly they exercise the change by @RaghavChamadiya in #2825
  • fix(plugins): carry the Fix first wording into the shared code-health skill source by @RaghavChamadiya in #2836
  • fix(dead-code): link Lambda handlers named in serverless, SAM and Terraform config by @RaghavChamadiya in #2834
  • fix(rust): resolve module paths and brace-group imports inside a crate by @RaghavChamadiya in #2835
  • fix(csharp): type each link of a chained call from the one before by @RaghavChamadiya in #2833
  • feat(performance): one opportunity per place you change, ranked by value by @RaghavChamadiya in #2817
  • feat(ui): lead Code Health with Fix first and put the code in the plan drawers by @RaghavChamadiya in #2831
  • fix(ui): give the unknown and no-strategy exclusions their words in Fix first by @RaghavChamadiya in #2838
  • feat(ui): plot the whole filtered set on the Findings impact and effort graph by @RaghavChamadiya in #2832
  • feat(health): Fix first applies the baseline precision levers and says why in plain words by @RaghavChamadiya in #2839
  • fix(health): close out Fix first: perf lines, refactoring default scope, plain text by @RaghavChamadiya in #2841
  • fix(mcp): say what get_dead_code's summary counts by @RaghavChamadiya in #2842
  • feat(core): render the action and Fix-first agent prompts in core by @RaghavChamadiya in #2843
  • fix(mcp): tell the agent to restart a server whose loaded code predates the checkout by @RaghavChamadiya in #2844
  • fix(mcp): run the tests under a reached conftest instead of recommending the conftest by @RaghavChamadiya in #2845
  • feat(mcp): move tool selection into core and add an available_when predicate by @RaghavChamadiya in #2846
  • fix(workspace): skip .NET test projects in contract extraction by @ybai08 in #2828
  • fix(risk): normalize target before dependency lookup by @nightcityblade in #2840
  • fix(java): record canonical constructor takes the record's own access level by @wanjinhao1 in #2798
  • fix(cli): don't pin the workspace root's own DB as the shared store by @nathanpride in #2524
  • fix(sessions): keep a matched rg path even at the repo root by @drakeo338 in #2639
  • fix(health): surface a fetch error in TestsReachingList by @drakeo338 in #2632
  • fix(doc-drift): treat a reader-project path as uncheckable by @Aman-goel-04 in #2802
  • fix(cli): warn when init --resume reuses pages without populating decisions (#670) by @rishu685 in #2482
  • feat(health): show what other lenses hold for a file in the health drawers by @RaghavChamadiya in #2847
  • feat(mcp): one next-call shape for actions, Fix first, health summaries and get_risk by @RaghavChamadiya in #2849
  • feat(ui): one shared prompt preamble, a Verify block everywhere, and Ask in chat from the prompt modal by @RaghavChamadiya in #2848
  • refactor(dead-code): serve findings from a session-free core module by @RaghavChamadiya in #2851
  • fix(objectivec): a static function in another .m file is not a call target by @lesbass in #2837
  • ci: let every push to main finish instead of cancelling the previous run by @RaghavChamadiya in #2826
  • refactor(refactoring): move the pure serving half into core and keep the queue rules as data by @RaghavChamadiya in #2850
  • fix(flows): stop labeling mention-only endings as confidence_filtered by @IdiotCoffee in #2714
  • refactor(health): split the work queue builder, name the recent-regression conditions, cover the chat adapter by @RaghavChamadiya in #2854
  • refactor(performance): move the pure serving half into core and keep the queue rules as data by @RaghavChamadiya in #2852
  • fix(mcp): make AvailabilityFacts hashable as its frozen dataclass promises by @RaghavChamadiya in #2858
  • feat(ui): show the Do next and Fix first agent prompts that core renders by @RaghavChamadiya in #2859
  • perf(update): read the stored vector width from a record, not LanceDB by @RaghavChamadiya in #2861
  • fix(refactoring): give split_file the same commit sets on a re-score as on a full index by @RaghavChamadiya in #2856
  • perf(persist): flush bulk upserts in batches and release the inserted rows by @RaghavChamadiya in #2864
  • perf(health): walk each file's tree once for every whole-file complexity pass by @RaghavChamadiya in #2865
  • perf(security-scan): mask comments and strings once, only when a pattern can match by @RaghavChamadiya in #2866
  • perf(git): share one blame entry per commit instead of one per line by @RaghavChamadiya in #2867
  • perf(search): cap LanceDB's metadata cache so generation memory stops climbing by @RaghavChamadiya in #2868
  • perf(graph): release the symbol subgraph copy once its two kernels have scored it by @RaghavChamadiya in #2869
  • perf(health): release each file's dataflow parse after it is evaluated by @RaghavChamadiya in #2870
  • fix(health): pick a file's lead finding the same way on every run by @RaghavChamadiya in #2872
  • fix(generation): stop SCC pages from archiving a spurious version on init by @RaghavChamadiya in #2873
  • perf(persist): bulk-insert new checkpoint rows and give SQLite a larger page cache by @RaghavChamadiya in #2874
  • feat(contracts): classify what a signature change does to callers by @RaghavChamadiya in #2620
  • feat(change-risk): scope the health delta to the paths a caller names by @RaghavChamadiya in #2621
  • perf(health): tokenize and verify clones without per-token objects by @RaghavChamadiya in #2878
  • fix(health): classify IO imports the same way on every run by @RaghavChamadiya in #2871
  • fix(dead-code): stop file age lifting members of a path-loaded set by @RaghavChamadiya in #2750
  • fix(refactoring): honour the finding registry and never lead with a test file by @RaghavChamadiya in #2751
  • perf(init): time every init stage and take three serial waits off its critical path by @RaghavChamadiya in #2875
  • perf(vector-store): write generated embeddings in a few large batches by @RaghavChamadiya in #2880
  • fix(workspace): route Postgres-backed watch/update through the shared DB instead of local wiki.db by @Aman-goel-04 in #2160
  • fix(init): resume regenerates a page whose vector landed but whose row did not by @RaghavChamadiya in #2883
  • fix(mcp): trim get_change_risk docstring under the schema budget by @RaghavChamadiya in #2925
  • feat(identity): tell people, coding agents and bots apart by @RaghavChamadiya in #2754
  • fix(refactoring): resolve opportunities left open by an older plan model by @RaghavChamadiya in #2904
  • fix(update): keep governance findings when health is rescored by @RaghavChamadiya in #2926
  • fix(health): classify generator output, native external libraries, minified trees and build logic by @RaghavChamadiya in #2899
  • fix(core): read PascalCase suite folders, Gradle test fixtures and QA projects as tests by @RaghavChamadiya in #2913
  • fix(health): count implicit member access in class cohesion by @RaghavChamadiya in #2908
  • fix(refactoring): stop move_method moving overrides, factories and stateful methods by @RaghavChamadiya in #2914
  • fix(health): keep primitive_obsession to signatures their author can change by @RaghavChamadiya in #2905
  • fix(health): report a duplicated assertion block only when it holds five real checks by @RaghavChamadiya in #2906
  • fix(health): grade dry_violation on code shared with other files only by @RaghavChamadiya in #2907
  • fix(dead-code): mark an unused export deletion-ready only when a use would have shown by @RaghavChamadiya in #2903
  • fix(dead-code): count a C/C++ name written outside its declaration as a use by @RaghavChamadiya in #2909
  • fix(perf): stop advising to move I/O out of locks that exist for it by @RaghavChamadiya in #2911
  • fix(perf): offer a batch plan only when the loop's key reaches the call by @RaghavChamadiya in #2923
  • fix(dead-code): stop git age alone putting C# files in the high tier by @RaghavChamadiya in #2910
  • fix(dead-code): a C# file named by a project that can see it is reachable by @RaghavChamadiya in #2912
  • feat(cli): tag the login link with its source and report the account link result by @swati510 in #2931
  • fix(dead-code): stop reporting programs and the files a runner executes by @RaghavChamadiya in #2916
  • fix(health): a function hotspot needs at least five changes by @RaghavChamadiya in #2918
  • fix(dead-code): drop the stray BOM that breaks parsing three modules by @RaghavChamadiya in #2941
  • fix(refactoring): suggest no validation command for a language with no known runner by @ybai08 in #2930
  • fix(refactoring): keep a precompiled header from naming a split-file group by @ybai08 in #2932
  • fix(objectivec): preserve C calls in local initializers by @harbinresearcher in #2877
  • fix(dataflow): keep a name the span declares out of Extract Method params by @ybai08 in #2927
  • Fix Go string concat reset detection by @mig-builds in #2939
  • fix(ingestion): mark Cargo target-table paths as reachable by @Aman-goel-04 in #2940
  • fix(health): ignore Python overload stubs in cohesion by @msranjana in #2764
  • fix(dead-code): a use from inside a symbol's own span is not a use of it by @Ishita-Singh-12 in #2863
  • fix(health): classify build files once by type and read that everywhere by @RaghavChamadiya in #2954
  • fix(health): stop flagging Rust unwraps that cannot panic and keep panics out of Fix first by @RaghavChamadiya in #2950
  • fix(cpp): read a namespace or type opened after a macro as a scope, not a function by @RaghavChamadiya in #2961
  • fix(perf): stop C++ io_in_loop on local socket calls, EINTR retries and numeric-only getaddrinfo by @RaghavChamadiya in #2968
  • fix(refactoring): stop offering an Extract Method span that is nearly the whole body by @RaghavChamadiya in #2952
  • fix(dataflow): count a closure's reads when inferring Extract Method params and returns by @RaghavChamadiya in #2953
  • fix(health): judge a function that is one dispatch by the code outside it and its heaviest arm by @RaghavChamadiya in #2915
  • fix(health): drop clones between shadcn/ui kit files by @RaghavChamadiya in #2980
  • fix(ingestion): stop declaration-only edges forming break_cycle plans by @RaghavChamadiya in #2983
  • fix(dead-code): count a module-path string naming a Python module as a use by @RaghavChamadiya in #2924
  • fix(java): count a static member import as a use of its declaring type by @RaghavChamadiya in #2977
  • fix(rust): read a mod declaration inside a macro as a module import by @RaghavChamadiya in #2978
  • fix(test-paths): read a test-suite(s) directory as a test tree by @RaghavChamadiya in #2987
  • fix(dead-code): count Outer.Inner uses of Python nested classes by @RaghavChamadiya in #2994
  • fix(dead-code): treat a Kotlin expect and its platform actuals as one declaration by @RaghavChamadiya in #2986
  • fix(health): class deps/ C libraries, benchmarks, C/C++ test helpers and Cargo examples as non-production by @RaghavChamadiya in #2958
  • fix(perf): stop JVM and C# db lexicons firing on in-memory calls by @RaghavChamadiya in #2898
  • fix(perf): report string concat in a loop only when it grows across iterations by @RaghavChamadiya in #2984
  • fix(php): link files loaded by a DIR path or a view name by @RaghavChamadiya in #2971
  • fix(refactoring): add split_file call edges in a fixed order by @RaghavChamadiya in #2991
  • fix(php): treat files a PHP tool loads as reachability roots by @RaghavChamadiya in #2979
  • fix(refactoring): stop extract_class splitting data holders, core-plus-offshoot classes and trait impls by @RaghavChamadiya in #2973
  • fix(dead-code): judge only real packages as zombies; count tool-config loads as uses by @RaghavChamadiya in #2982
  • fix(health): store no score for a file whose language health cannot analyse by @RaghavChamadiya in #2955
  • fix(ui): draw a file health cannot analyse grey, never as a score by @RaghavChamadiya in #2963
  • fix(dead-code): count Go package-scope and import-qualified uses by @RaghavChamadiya in #2974
  • fix(dead-code): treat the modules Django loads from an installed app as used by @RaghavChamadiya in #2975
  • fix(health): class a docs site's code samples as docs examples by @RaghavChamadiya in #2993
  • fix(refactoring): never offer an Extract Method span that yields or exits through a macro by @RaghavChamadiya in #2956
  • fix(dead-code): stop reporting C# types a project, a framework or a package consumer uses by @RaghavChamadiya in #2967
  • fix(perf): a lock acquisition's own retry loop is not lock_in_loop by @RaghavChamadiya in #2981
  • fix(php): record the declared class name in imported_names by @RaghavChamadiya in #2972
  • fix(perf): stop claiming hot_path_sync_io is request-reachable by @RaghavChamadiya in #2969
  • fix(health): stop calling Rust builders, accessor types and enums low-cohesion by @RaghavChamadiya in #2951
  • fix(refactoring): keep move_method off override members and C# static classes by @RaghavChamadiya in #2960
  • fix(dead-code): treat C# compiler polyfills, Vogen converter markers and file-based apps as roots by @RaghavChamadiya in #2990
  • fix(dataflow): stop reading a may-def's bookkeeping use as an Extract Method param by @RaghavChamadiya in #2959
  • fix(refactoring): refuse an Extract Method span whose declaration the later code still names by @RaghavChamadiya in #2970
  • fix(health): keep real but low-value work out of the Fix first top tier by @RaghavChamadiya in #2965
  • feat(ui): show the lower-priority reason on findings and perf queue rows by @RaghavChamadiya in #2989
  • fix(dead-code): treat build-named, JMH and bare-name-used JVM classes as used by @RaghavChamadiya in #2917
  • fix(providers): close a provider's SDK client on the event loop that used it by @ybai08 in #2949
  • fix(health): suppress defer_in_loop when the next statement exits the loop by @Pushpak731 in #2942
  • fix(perf): take a Go semaphore of any size but a literal 0 as a bound by @ybai08 in #2985
  • fix(health): keep the Java package line out of the clone token stream by @ybai08 in #2948
  • fix(call-resolver): resolve VB.NET Me and MyClass calls in the caller's own class by @ybai08 in #2855
  • fix(objectivec): give a C function returning a pointer its symbol by @ybai08 in #2857
  • fix(health): skip plan generation for test-context performance opportunities by @Aman-goel-04 in #2964
  • fix(health): ignore Rust local use paths in I/O imports by @kocaemre in #2896
  • fix(ingestion): read Python all as a bounded visibility signal (#2350) by @JikSau-D in #2475
  • fix(health): count Go select arms and TS/JS default arms in complexity by @JikSau-D in #2255
  • fix(ingestion): dedupe Rust mod items per #[path] value by @Pushpak731 in #2943
  • docs(graph): sync resolution origin vocabulary by @taljeon in #2400
  • docs: rewrite the README, benchmarks and user docs around what each reader needs by @RaghavChamadiya in #3002
  • fix(answer): bound the greps a long question can trigger by @RaghavChamadiya in #3016
  • fix(search): count a one-hump word as an identifier only in code context by @RaghavChamadiya in #3014
  • fix(answer): stop echoing the question in the recovery hint by @RaghavChamadiya in #3009
  • feat(context): rank and cap the symbol card, and preview docs by counts by @RaghavChamadiya in #3010
  • feat(search): spend the result window on distinct files for code-location queries by @RaghavChamadiya in #3011
  • fix(index): report a failed embed instead of a healthy semantic index by @RaghavChamadiya in #3015
  • feat(answer): serve a ranked list of candidate files at every confidence by @RaghavChamadiya in #3012
  • feat(search): give every result row one path field by @RaghavChamadiya in #3019
  • feat(mcp): serve a lean _meta envelope by default by @RaghavChamadiya in #3017
  • feat(mcp): serve compact JSON in the tool result text by @RaghavChamadiya in #3018
  • test(mcp): add a retrieval guard for ranking and response-shape changes by @RaghavChamadiya in #3008
  • refactor(shared): move serve lock, path normalizer and keyed cache into shared packages by @RaghavChamadiya in #3021
  • feat(lens): add Lens, a Claude Code mod that shows Repowise's view of the repo while Claude works by @RaghavChamadiya in #3022
  • feat(lens): add the Flow dashboard and light the map with Claude's turn by @RaghavChamadiya in #3023
  • feat(lens): inspect and zoom the map from the keyboard by @RaghavChamadiya in #3025
  • fix(worktree): re-key the repo-level pages when a seeded index adopts its checkout by @RaghavChamadiya in #2748
  • feat(generation): readable file pages and an honest overview capability table by @RaghavChamadiya in #2741
  • fix(ui): lead Code Health with a short score headline and fold Fix first under it by @RaghavChamadiya in #3026
  • feat(cli): repowise publish, put a local repo on repowise.dev in one command by @swati510 in #3004
  • feat(vscode): Publish to repowise.dev command and one-time prompts by @swati510 in #3006
  • feat(cli): an occasional repowise.dev hint at the moments it helps by @swati510 in #3005
  • feat(web): publish to repowise.dev from the local UI, with dismissible tips by @swati510 in #3007
  • fix(web): read the server API key from a private variable only by @RaghavChamadiya in #2721
  • feat(wiki): keep agent material in a page digest beside the body by @RaghavChamadiya in #2739
  • feat(generation): a tiered system map on the repository overview by @RaghavChamadiya in #2747
  • chore(deps): patch the open npm and Python security advisories by @RaghavChamadiya in #2723
  • fix(refactoring): drop a module label that more than one split-file group would take by @ybai08 in #2976
  • fix(matching): mark internally-served consumers to prevent cross-repo candidate linking by @rishu685 in #2884
  • feat(mcp): package dependency summary in get_overview by @RaghavChamadiya in #2749
  • fix(server): preserve workspace extraction diagnostics by @Shivang9983 in #2489
  • fix(dead-code): avoid false JSX prop guard findings by @justonemorenight in #2534
  • test(health): guard Pascal-only tests that skip the shared _walk() helper by @Laex in #1701
  • fix: restore logger levels after silencing machine output by @Aman-goel-04 in #2011
  • feat(generation): module pages written from structured facts, with checked diagrams and citations by @RaghavChamadiya in #2740
  • Handle corrupt LanceDB reads during resume by @siddheshbhurke in #1882
  • fix(server): count stale pages without loading content by @ASVLCII in #2257
  • fix(cli): pass RichProgressCallback to workspace persistence phase by @Shivang9983 in #2158
  • fix: restore main CI after #2723 and #3007 by @RaghavChamadiya in #3028
  • fix(security-scan): stop reading kebab-case names and rule prose as findings by @RaghavChamadiya in #3030
  • fix(ui): quiet Code Health and Coverage, describe this release's score changes, and stop pages over-scrolling by @RaghavChamadiya in #3031
  • fix(health): Fix first Verify for findings with no plan reads measured coverage, then reaching tests by @RaghavChamadiya in #3033
  • fix(perf): a call in a for loop's iterable belongs to the loop around it by @RaghavChamadiya in #3034
  • fix(update): re-score and re-parse an unchanged checkout when the analyzer or parser changed by @RaghavChamadiya in #3035
  • fix(graph): type Go builder chains through repository return types by @RaghavChamadiya in #3036
  • fix(ui): let embedding hosts hide CLI hints and the refactoring scope control, and fix the hotspot row hover by @RaghavChamadiya in #3037
  • fix(mcp): name get_health's unscored-file count unanalysed_file_count, as the HTTP API does by @RaghavChamadiya in #3038
  • fix(cli): accept only commit ids from state.json before handing them to git by @RaghavChamadiya in #3039
  • fix(vscode): only follow a serve lock file that points at this machine by @RaghavChamadiya in #3040
  • release: v0.55.0 - precision across graph, health and dead code, leaner MCP responses, and Lens by @RaghavChamadiya in #3032

New Contributors

Full Changelog: v0.54.0...v0.55.0