Repository navigation
v0.55.0
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
- @ybai08 made their first contribution in #2828
- @wanjinhao1 made their first contribution in #2798
- @drakeo338 made their first contribution in #2639
- @lesbass made their first contribution in #2837
- @IdiotCoffee made their first contribution in #2714
- @harbinresearcher made their first contribution in #2877
- @mig-builds made their first contribution in #2939
- @msranjana made their first contribution in #2764
- @Ishita-Singh-12 made their first contribution in #2863
- @Pushpak731 made their first contribution in #2942
- @kocaemre made their first contribution in #2896
- @taljeon made their first contribution in #2400
- @siddheshbhurke made their first contribution in #1882
- @ASVLCII made their first contribution in #2257
Full Changelog: v0.54.0...v0.55.0