Skip to content

v0.58.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 19:02
· 252 commits to main since this release
b28c49d

What's Changed

  • docs: change evidence, components, policy and reports in the README and docs by @RaghavChamadiya in #3947
  • feat(overview): fold Do next on request and keep critical for live secrets by @RaghavChamadiya in #3966
  • docs(readme): match the CodeScene tile wording to the benchmark method by @RaghavChamadiya in #3969
  • refactor(chat): build chart dataset rows from plain records by @RaghavChamadiya in #3951
  • test(analysis): golden snapshots for scan_source, dead code, health and parser by @RaghavChamadiya in #3970
  • test(pipeline): pin persistence step order, failure handling and decision chain by @RaghavChamadiya in #3971
  • test(server): pin get_context, get_symbol, search and overview payloads by @RaghavChamadiya in #3972
  • test(cli): pin serve, doctor and update behaviour by @RaghavChamadiya in #3974
  • refactor(overview): build the overview summary from section functions by @RaghavChamadiya in #3979
  • refactor(security): split security_scan into focused modules by @RaghavChamadiya in #3973
  • fix(serve): reject web UI archive members that escape the cache directory by @RaghavChamadiya in #3975
  • refactor(mcp): share the signature and stale-status helpers by @RaghavChamadiya in #3976
  • refactor(persistence): split health crud into findings, metrics, snapshots and summary modules by @RaghavChamadiya in #3977
  • refactor(core): one git runner for analysis, doc drift and edit capture by @RaghavChamadiya in #3980
  • refactor(cli): split workspace_cmd into a package and its largest commands into steps by @RaghavChamadiya in #3981
  • refactor(serve): split serve_cmd into a package and serve_command into steps by @RaghavChamadiya in #3982
  • refactor(cli): split helpers into focused modules behind the helpers facade by @RaghavChamadiya in #3983
  • fix(workspace): filtered diagnostics reason counts and list counts like status by @RaghavChamadiya in #3984
  • refactor(doctor): split repo checks into check groups, repair and render by @RaghavChamadiya in #3985
  • refactor(cli): one outcome recorder and snapshot refresh for init and update by @RaghavChamadiya in #3986
  • refactor(core): one set of repo-relative path helpers by @RaghavChamadiya in #3987
  • test(providers): point the provider-name allowlist at the moved helpers module by @RaghavChamadiya in #3998
  • refactor(core): split pipeline persist into a package by writer area by @RaghavChamadiya in #3989
  • refactor(context): resolve get_context targets through an ordered resolver list by @RaghavChamadiya in #3988
  • refactor(context): build the get_context card from a table of sections by @RaghavChamadiya in #3997
  • refactor(init): InitOptions and the front stages of init_command by @RaghavChamadiya in #4000
  • refactor(core): extract persist_analysis decision steps into named helpers by @RaghavChamadiya in #3999
  • refactor(ingestion): share traverse and parse stages between full and resume ingestion by @RaghavChamadiya in #4001
  • refactor(workspace): split update_workspace into selection, per-repo update and phase stages by @RaghavChamadiya in #4002
  • refactor(pipeline): split incremental.py into an incremental/ package by @RaghavChamadiya in #4004
  • refactor(git-indexer): share one per-file worker pool between full and incremental indexing by @RaghavChamadiya in #4003
  • refactor(pipeline): persist_incremental_index on an ordered step runner by @RaghavChamadiya in #4005
  • fix(ingestion): follow a Kotlin typealias to the repo class it names by @ozenyunus35 in #3787
  • fix(ingestion): read C# 14 extension block members as extension methods by @ozenyunus35 in #3920
  • refactor(update): UpdateOptions and UpdateRun for run_update by @RaghavChamadiya in #4006
  • refactor(init): ingest, generation, state and post-run stages of init_command by @RaghavChamadiya in #4007
  • refactor(health): move the analyzer's test lookups into RepoTestIndex by @RaghavChamadiya in #4008
  • refactor(answer): answer retrieval pipeline as a stage package; split _structured_search by @RaghavChamadiya in #4010
  • refactor(update): preflight and change-detection stages out of run_update by @RaghavChamadiya in #4013
  • fix(dead-code): honour Kotlin @Suppress("unused") and keep annotations the grammar splits off by @Sriram-PR in #3873
  • refactor(symbol): get_symbol guards and read stages; split _cross_repo_block by @RaghavChamadiya in #4018
  • refactor(health): move the post-walk performance passes into CrossFunctionPerfStage by @RaghavChamadiya in #4011
  • refactor(health): move per-file evaluation out of HealthAnalyzer into FileEvaluator by @RaghavChamadiya in #4016
  • refactor(ts-workspace): split ts_workspace into a package with a workspace probe class by @RaghavChamadiya in #4017
  • refactor(update): run the docs-mode persist on the core step runner by @RaghavChamadiya in #4020
  • refactor(update): lock, index and index-only stages out of run_update by @RaghavChamadiya in #4021
  • refactor(update): docs, decision and generation stages out of run_update by @RaghavChamadiya in #4022
  • feat(ingestion): type Dart for-in loop variables from the container they walk by @Aman-goel-04 in #3853
  • test(cli): import scipy.sparse before the real-call guard so its CPU probe is not refused by @RaghavChamadiya in #4024
  • refactor(health): split the Extract Method slicer and the Python perf dialect into focused modules by @RaghavChamadiya in #4025
  • fix(update): write the repair marker after a docs-mode update by @RaghavChamadiya in #4026
  • refactor(workspace): split workspace update into an update package by @RaghavChamadiya in #4038
  • refactor(dead-code): move module-level rules out of the analyzer by @RaghavChamadiya in #4039
  • refactor(cli): split risk_cmd into a package and stage the risk card renderer by @RaghavChamadiya in #4040
  • refactor(risk): build the PR directive from stage functions by @RaghavChamadiya in #4041
  • refactor(parser): split parser.py into a package; per-language import extractors on LanguageConfig by @RaghavChamadiya in #4042
  • refactor(dead-code): move the unused-export pass into passes/unused_exports.py by @RaghavChamadiya in #4043
  • refactor(mcp): split tool_search into a package of search stages by @RaghavChamadiya in #4044
  • refactor(cli): move init's single-repo stages out of command.py by @RaghavChamadiya in #4045
  • refactor(workspace): split the single-repo update into stages by @RaghavChamadiya in #4046
  • refactor(risk): split the per-target risk card into stages by @RaghavChamadiya in #4047
  • refactor(health): lift the perf pass closures into a per-file _PerfWalk class by @RaghavChamadiya in #4062
  • refactor(context): build the get_context call graph from stage functions by @RaghavChamadiya in #4066
  • refactor(pipeline): run state, setup and the index phase out of run_pipeline by @RaghavChamadiya in #4073
  • refactor(cli): stage the workspace update and its docs pass by @RaghavChamadiya in #4063
  • refactor(c4): split build_architecture_view into load, enrich and assemble stages by @RaghavChamadiya in #4068
  • refactor(cli): stage the fast-to-full upgrade by @RaghavChamadiya in #4069
  • refactor(cli): stage workspace init's per-repo index, generation and persistence by @RaghavChamadiya in #4048
  • refactor(dead-code): move the unreachable-file and unused-internal passes into passes/ by @RaghavChamadiya in #4049
  • refactor(git): move the incremental update's signal stages out of index_changed_files by @RaghavChamadiya in #4050
  • refactor(call-resolver): move overload selection, barrel forwarding and inheritance into mixin modules by @RaghavChamadiya in #4051
  • refactor(mcp): split tool_symbol into a package of read stages by @RaghavChamadiya in #4052
  • refactor(answer): split the get_answer orchestrator into stages by @RaghavChamadiya in #4055
  • refactor(health): dispatch the perf walk to per-node handlers by @RaghavChamadiya in #4067
  • refactor(context): split get_context enrichment into call_graph, signals and skeleton modules by @RaghavChamadiya in #4072
  • refactor(pipeline): analysis phase and KG skeleton out of run_pipeline by @RaghavChamadiya in #4078
  • refactor(dead-code): move the zombie-package pass and split the guarded-render scan by @RaghavChamadiya in #4053
  • refactor(receiver-typing): split call_receiver_typing into a package by language by @RaghavChamadiya in #4054
  • refactor(cli): stage workspace init's selection, provider setup, config and hooks by @RaghavChamadiya in #4056
  • refactor(git): stage index_repo and the co-change walk by @RaghavChamadiya in #4057
  • refactor(mcp): split tool_change_risk into a package of review blocks by @RaghavChamadiya in #4058
  • refactor(answer): grade answers through an ordered table of gates by @RaghavChamadiya in #4059
  • refactor(health): split the Fix-first builder into unit modules by @RaghavChamadiya in #4071
  • refactor(context): move the non-docs get_context card sections into sections.py by @RaghavChamadiya in #4075
  • refactor(pipeline): generation phase and result assembly out of run_pipeline by @RaghavChamadiya in #4080
  • refactor(workspace): stage contract extraction by @RaghavChamadiya in #4060
  • refactor(answer): dedupe the answer projection one collection at a time by @RaghavChamadiya in #4064
  • refactor(mcp): split reference_edit_set into graph, scan and reply stages by @RaghavChamadiya in #4065
  • refactor(cli): stage health_command into view, scope and renderer functions by @RaghavChamadiya in #4074
  • refactor(pipeline): stage decision extraction into session mining and source reporting by @RaghavChamadiya in #4081
  • refactor(risk): stage the cross-repo enrichment of risk cards by @RaghavChamadiya in #4070
  • refactor(ingestion): read docstrings through per-language tables by @RaghavChamadiya in #4076
  • refactor(sessions): run the decision miner's event gates on a per-session state class by @RaghavChamadiya in #4082
  • refactor(context): build get_context from stage functions by @RaghavChamadiya in #4077
  • feat(mcp): get_health metric rows carry structure_deduction and history_deduction by @RaghavChamadiya in #4108
  • feat(change-risk): map symbols a change moves across files by @RaghavChamadiya in #4109
  • feat(health): skip coverage markers on re-export-only files by @RaghavChamadiya in #4110
  • fix(cli): repowise health --format json keeps withheld finding types by @RaghavChamadiya in #4111
  • feat(change-risk): pair findings across moved code and count improved findings by @RaghavChamadiya in #4112
  • feat(health): primitive_obsession skips test material by @RaghavChamadiya in #4118
  • feat(health): say when a file's history is too short to count beside its score by @RaghavChamadiya in #4117
  • feat(change-risk): compare a split source on the base side so a pure split reads as moved by @RaghavChamadiya in #4125
  • feat(health): brain_method becomes advisory by @RaghavChamadiya in #4115
  • feat(health): rename the bumpy_road biomarker to repeated_nesting by @RaghavChamadiya in #4113
  • feat(health): size markers read judged CCN and code lines by @RaghavChamadiya in #4116
  • feat(change-risk): store improved/moved totals and moved_from in commit-health rows by @RaghavChamadiya in #4127
  • feat(health): plain display labels for five health markers by @RaghavChamadiya in #4119
  • feat(git): count prior defects by conventional commit type by @RaghavChamadiya in #4126
  • feat(ui): show what a file's score lost to code shape, change history and test coverage by @RaghavChamadiya in #4124
  • fix(ui): name the 1.0 floor in the Why this score arithmetic by @RaghavChamadiya in #4132
  • feat(ui): say where a moved finding came from in the commit health table by @RaghavChamadiya in #4133
  • feat(health): de-stack history findings before the history cap by @RaghavChamadiya in #4129
  • feat(mcp): get_health include=["what_if"] names the points each fix recovers by @RaghavChamadiya in #4130
  • feat(change-risk): health_delta reports each changed file's score before and after by @RaghavChamadiya in #4123
  • feat(change-risk): change-risk health reads the index's dependents on both sides by @RaghavChamadiya in #4128
  • feat(cli): repowise health --score scores files from disk, --against compares a revision by @RaghavChamadiya in #4139
  • feat(owners): people-only ownership summary and knowledge matrix by @RaghavChamadiya in #4136
  • fix(cli): load the live-score module only when health runs the analyzer by @RaghavChamadiya in #4155
  • feat(areas): directory health rollups at any depth by @RaghavChamadiya in #4135
  • feat(history): lead commits and changes with their health delta, add wins by @RaghavChamadiya in #4137
  • feat(web): group the repo sidebar, give Tests and Security their own pages by @RaghavChamadiya in #4142
  • fix(coverage): read the cached test-reach walk through the shared index-stamp cache by @RaghavChamadiya in #4158
  • feat(changes): lead change records with what they did to code health by @RaghavChamadiya in #4141
  • feat(coupling): open on area pairs and flag only coupling no import explains by @RaghavChamadiya in #4152
  • feat(health): lead the Performance tab with the action, grouped by area by @RaghavChamadiya in #4138
  • feat(ui): one shared FilePath that never cuts the filename by @RaghavChamadiya in #4161
  • feat(health): zoomable folder map with lenses, held-out scope and a context rail by @RaghavChamadiya in #4157
  • feat(health): saturating per-category curve with per-function grouping by @RaghavChamadiya in #4144
  • feat(owners): Ownership page around knowledge coverage, risk and off-boarding by @RaghavChamadiya in #4153
  • feat(health): hotspots counted, searched and paged over the whole set by @RaghavChamadiya in #4162
  • feat(health): quiet hairline finding cards with the agent prompt as a ghost action by @RaghavChamadiya in #4164
  • feat(commits): open the Commits page on what the work did to code health by @RaghavChamadiya in #4154
  • feat(overview): a short Overview that opens on what to do by @RaghavChamadiya in #4163
  • docs(ui): describe code health as technical debt by @RaghavChamadiya in #4180
  • fix(tests): batch the IN lists of test-reachability edge reads by @Laex in #3933
  • fix(graph): resolve React Native platform files to import edges by @Aman-goel-04 in #3711
  • fix(kotlin): recover top-level declarations with two annotations (#3758) by @Aman-goel-04 in #3839
  • fix(dataflow): build try regions and match error exits inside switch arms (#3494) by @rishu685 in #3694
  • fix(coverage): recommend a per-test coverage command that exists by @ozenyunus35 in #3676
  • fix(ingestion): type a Kotlin or Swift property initialised with a constructor by @ozenyunus35 in #3789
  • fix(cli): don't count model_free pages as unwritten in generate's summary by @ozenyunus35 in #3776
  • fix: flag public API in published C# projects by @Aman-goel-04 in #3579
  • fix(csharp): bind locals created with object-initializer syntax by @ozenyunus35 in #3957
  • fix(workspace): preserve repo aliases and propagate cancellation by @arnavsx3 in #4107
  • fix(mcp): gate bare symbol names defined only in excluded files by @ozenyunus35 in #4084
  • fix(pipeline): keep a failing on_error from failing a guarded step by @ozenyunus35 in #4079
  • fix(cost): price Gemini 3 preview models at their own rates by @ozenyunus35 in #3967
  • fix(health): treat cut-off signatures and stub bodies as declarations by @WynandVStaden in #3950
  • fix(suspects): report when candidates reach the change index cap by @Yushu-Li in #3930
  • fix(dead-code): root Spring servlet initializers as entry points by @ozenyunus35 in #3921
  • fix(refactoring): preserve Java helper types and throws by @PragalvaXFREZ in #3882
  • fix(dead-code): root C# cmdlets, source generators and benchmarks by @ozenyunus35 in #3926
  • fix(events): ignore tied owners at the ownership margin by @kocaemre in #3870
  • docs(health): point the complexity README at ast_utils.self_member_name by @wang2-lat in #4169
  • fix(health): count active contributors by canonical identity by @JackGitLab in #4086
  • fix(doc-drift): join_relative normalizes segments instead of stripping characters (#4014) by @Yi-111-a in #4023
  • fix(dead-code): treat @GlideModule as a tooling-loaded root by @abdelhadi703 in #3886
  • fix(risk): apply .repowise/health-rules.json when rescoring commits by @aazminu in #4179
  • fix(health): canonicalize legacy biomarker ids in as_biomarker_result by @aazminu in #4177
  • fix(health): filter score_breakdown to defect-dimension findings by @aazminu in #4178
  • fix(#3825): avoid constant-output extract method helpers by @msranjana in #3938
  • fix(ingestion): normalise CRLF in stored signatures and docstrings by @ddaihao2022 in #3929
  • fix(health): normalize module dead-code penalty by symbol count by @Gabrieljr42 in #4083
  • fix(attention): a hand-recorded proposed decision is not auto-proposed by @Yi-111-a in #4015
  • feat(health): add PHP dataflow dialect and Extract Method support (#3434) by @rishu685 in #3466
  • fix(cli): keep -x excludes when init customize asks for patterns by @ganeshmshetty in #4061
  • fix(mcp): clarify five workspace error replies by @jungwonenjoyericl in #3943
  • test: run pipeline tests on a tmp copy of sample_repo (#4091) by @dhvani7014 in #4099
  • feat(web): keep the sidebar open on Docs by @RaghavChamadiya in #4186
  • feat(cli): clearer labels in risk, dead-code, whats-new and the generation report by @RaghavChamadiya in #4197
  • feat(actions): act now on a week's defect-class regressions, plan its code shape by @RaghavChamadiya in #4198
  • feat(health): count a docs folder as docs only at the root or beside its site config by @RaghavChamadiya in #4200
  • feat(security): read a truncated digest or a cache key's md5 as an id, not a weak hash by @RaghavChamadiya in #4201
  • feat(answer): cite the files the answer names and hold high when it leaves the top hit by @RaghavChamadiya in #4202
  • feat(mcp): a lean get_overview default with the tool surface, quarter and full scope on request by @RaghavChamadiya in #4207
  • feat(health): name production code's score beside the all-files headline by @RaghavChamadiya in #4204
  • feat(why): anchor a question on the indexed file it names by @RaghavChamadiya in #4203
  • feat(suspects): rank path targets by what they name and take a typed symptom over MCP by @RaghavChamadiya in #4205
  • perf(mcp): run test selection off the event loop and reuse it per change by @RaghavChamadiya in #4208
  • feat(knowledge-graph): show the layer-naming prompt each layer's files by folder by @RaghavChamadiya in #4206
  • feat(change-risk): trim a requested evidence checklist inside its rows by @RaghavChamadiya in #4210
  • perf(change-risk): serve a repeated committed range from a per-process cache by @RaghavChamadiya in #4209
  • fix(mcp): tier dead code after the cross-repo cut and keep partial evidence from reading clear by @RaghavChamadiya in #4196
  • perf(git): open repositories through a Repo that closes without gc.collect by @RaghavChamadiya in #4212
  • feat(health): rank a critical code-shape marker as high in Fix first by @RaghavChamadiya in #4199
  • fix(update): retire template pages the selection no longer picks by @RaghavChamadiya in #4211
  • perf(update): cap the per-update commit-health scan at 10 seconds by @RaghavChamadiya in #4213
  • feat(mcp): get_overview lays out every package, its front doors, layer roots and commands by @RaghavChamadiya in #4214
  • test(ui): query the refactoring list pager by text so the paging test stays under the timeout by @RaghavChamadiya in #4219
  • fix(change-risk): lead the headline, reasons, actions and findings with the same finding by @RaghavChamadiya in #4215
  • perf(update): skip clone detection and dead code when only prose changed by @RaghavChamadiya in #4217
  • fix(mcp): one code-file count and real repo summaries in the workspace views by @RaghavChamadiya in #4216
  • perf(why): look up a question's named files in one query by @RaghavChamadiya in #4218
  • fix(update): recount the file-page scope on every update by @RaghavChamadiya in #4220
  • feat(health): quiet hairline cards on the Performance tab from one shared card class by @RaghavChamadiya in #4165
  • feat(change-risk): a leaner default that keeps every fact an agent acts on by @RaghavChamadiya in #4221
  • perf(architecture): classify each path once when rolling edges up to boxes by @RaghavChamadiya in #4222
  • perf(health): delete replaced health rows in one statement by @RaghavChamadiya in #4226
  • perf(persistence): analyze the SQLite index at the end of every write by @RaghavChamadiya in #4229
  • fix(health): name performance work in Fix first and Do next only when its cost is confirmed by @RaghavChamadiya in #4227
  • feat(perf): judge a loop's size by the columns of the tables it reads by @RaghavChamadiya in #4236
  • fix(health): one performance headline, led by the causes worth fixing now by @RaghavChamadiya in #4231
  • fix(refactoring): the characterization step names the changed function and the tests that reach its file by @RaghavChamadiya in #4232
  • fix(performance): number a served cause by its place in the ranked list by @RaghavChamadiya in #4233
  • fix(performance): a cause a request, consumer or job role reaches is entry reachable by @RaghavChamadiya in #4234
  • feat(editor-files): a lean CLAUDE.md and AGENTS.md block with sections you can add back by @RaghavChamadiya in #4235
  • feat(website): old docs links land on the matching docs.repowise.dev page by @RaghavChamadiya in #4238
  • fix(init): --no-prose makes no model calls, even with an API key set by @RaghavChamadiya in #4239
  • fix(init): a re-run never indexes init's own files, and a fast re-init keeps the documentation by @RaghavChamadiya in #4245
  • fix(status): status and state.json describe the index the last command left by @RaghavChamadiya in #4241
  • feat(init): ask before pointing the global MCP entry at this repo by @RaghavChamadiya in #4246
  • fix(init): exit 2 when a run finishes with gaps and 130 when interrupted by @RaghavChamadiya in #4242
  • fix(reindex): reindex adds semantic search after a keyless init, and every run names its embedder by @RaghavChamadiya in #4240
  • fix(init): workspace init keeps the repos you did not pick and skips git worktrees by @RaghavChamadiya in #4264
  • feat(cli): one set of mode names across init, status and update by @RaghavChamadiya in #4249
  • feat(generate): after a keyless init, generate also reads the decisions it skipped by @RaghavChamadiya in #4243
  • feat(init): a logged-in Claude Code, Codex or OpenCode is offered with its quota and time, never spent unasked by @RaghavChamadiya in #4247
  • feat(init): progress you can read, a checklist of every step with counts, time and what comes next by @RaghavChamadiya in #4251
  • refactor(init): split the subscription auth and note checks into small helpers by @RaghavChamadiya in #4265
  • feat(update): repowise update --full takes a fast index to full without a key, and every surface names it by @RaghavChamadiya in #4244
  • feat(init): short lines when piped, and --progress json for agents by @RaghavChamadiya in #4254
  • fix(ci): unbreak main, stop spelling 'ollama' in upgrade_flow (#4244) by @Aman-goel-04 in #4268
  • fix(ci): unbreak main's Integration tests, the init run with a warning exits 2 (#4242) by @Aman-goel-04 in #4269
  • feat(init): pick a workspace's repos with --repos, and workspace add builds documentation from code by default by @RaghavChamadiya in #4260
  • feat(init): one finish panel that leads with repowise serve by @RaghavChamadiya in #4248
  • feat(init): one plan screen replaces the run of start questions by @RaghavChamadiya in #4253
  • feat(init): the plan screen offers to keep machine-specific files out of git by @RaghavChamadiya in #4256
  • feat(init): a folder of repos gets the same plan screen, with the repo list and r to choose by @RaghavChamadiya in #4262
  • fix(init): read embedder and local provider names from the registry in the finish panel and plan screen by @RaghavChamadiya in #4270
  • fix(selection): run only the tests that read a changed fixture file by @Aman-goel-04 in #4267
  • feat(init): the workspace finish panel matches the single-repo one by @RaghavChamadiya in #4263
  • feat(init): a brand theme, ASCII glyphs on non-UTF-8 terminals, and an owl that shows how the run ended by @RaghavChamadiya in #4257
  • docs(quickstart): a human path and an agent path, serve first, and every mode with its upgrade command by @RaghavChamadiya in #4250
  • docs(init): every surface that teaches init says what the CLI does by @RaghavChamadiya in #4255
  • fix(security): honour allow markers in prose without a comment opener by @Aman-goel-04 in #4143
  • fix(health): walk C++ condition declaration values for reads and exclude bare receiver fields from params (#3824) by @rishu685 in #4122
  • fix(dead-code): root C# classes with custom MEF export attributes (#3854) by @rishu685 in #4009
  • fix(dead-code): rescue C/C++ files listed in CMake, .vcxproj or .rc (#3820) by @rishu685 in #4121
  • fix(vscode): relocate doc drift diagnostics on live document edits (#2668) by @rishu685 in #2782
  • fix(ingestion): give Rust cfg build variants their own ids by @Aman-goel-04 in #3020
  • fix(graph): type a Kotlin call chained on another call (#3756) by @Aman-goel-04 in #3845
  • fix(ingestion): redirect a Python name alias onto its real definition by @Aman-goel-04 in #2799
  • fix(go): bind calls through interface-typed variables to interface method specs by @Aman-goel-04 in #3850
  • feat(core): demote PHP production classes named Test.php outside testsuites (#3234) by @rishu685 in #3399
  • fix(cli): use init's mode names and no em dashes after init by @kayaal34 in #4284
  • fix(docs): clear stale doc-drift baseline by @ZhangDT-sky in #4288
  • fix: doctor table mode exits 1 when checks fail by @swastiktawate in #4289
  • docs: correct untested hotspot detection conditions by @Maedza in #3449
  • fix(editor-files): skip structure-only preamble in key modules and architecture by @c0mrade8 in #3261
  • fix(workspace): a state.json that is not an object no longer blocks the workspace update by @Venius24 in #4036
  • fix(workspace): log swallowed errors when reading saved exclude patterns by @ian0318git in #3054
  • fix(doctor): fallback to environment-honouring Repo constructor for linked worktrees (#1931) by @teddiesloco in #1952
  • fix(dead-code): rescue a Swift extension whose member name is declared elsewhere by @ynaamane in #3876
  • test(doctor): integration tests expect exit 1 when a check fails by @RaghavChamadiya in #4291
  • fix(tests): spell the backslash in the windows changed path literally by @ump45nose in #3402
  • feat(llm): add GitHub Copilot CLI provider by @Marko0519 in #3710
  • fix(core): classify test-helpers and test-utils directories as test support by @TheNetherWatcher in #3257
  • Advertise MCP tool annotations built from tool safety by @wanjinhao1 in #2762
  • feat(ci): fail security and doc-drift gates when the committed baseline grows by @RaghavChamadiya in #4299
  • perf(health): faster change health comparison with package roots from changed paths and a content cache by @RaghavChamadiya in #4311
  • test(mcp): give the shared-selection timeout test a budget above the clock resolution by @RaghavChamadiya in #4296
  • feat(cli): status says when the next update re-scores health or rescans security by @RaghavChamadiya in #4301
  • fix(cli): reject init --repos with no repo names by @RaghavChamadiya in #4300
  • fix(owners): render owner rows and profiles from the previous release's payloads by @RaghavChamadiya in #4303
  • fix(health): show the open performance count from older health summaries by @RaghavChamadiya in #4304
  • fix(health): give findings stored under a renamed marker id their advice by @RaghavChamadiya in #4305
  • fix(commits): show the agent trend when a server omits the enabled flag by @RaghavChamadiya in #4306
  • feat(overview): let a host set or drop the Tests card's route and command by @RaghavChamadiya in #4307
  • fix(init): a workspace init stamps each repo so the first update has nothing to redo by @RaghavChamadiya in #4293
  • fix(editor-files): the CLAUDE.md scope line uses the CLI's mode names by @RaghavChamadiya in #4294
  • fix(health): leave the hotspot figure out of the headline when there is none by @RaghavChamadiya in #4295
  • fix(cli): let update --full reuse an index copied to a new path by @RaghavChamadiya in #4308
  • fix(cli): name the same model step for the same index mode everywhere by @RaghavChamadiya in #4309
  • fix(workspace): an added repo gets the state init writes, so the first update has nothing to redo by @RaghavChamadiya in #4310
  • fix(deps): patch aiohttp and mcp security alerts by @RaghavChamadiya in #4292
  • feat(health): add repowise health check, a CI gate on findings a change introduces by @RaghavChamadiya in #4302
  • feat(release): attach a labelled openapi.json to every GitHub release by @RaghavChamadiya in #3948
  • feat(health): flag added suppressions, weakened tests and test-only branches in health check by @RaghavChamadiya in #4312
  • release: v0.58.0 · a guided init, a redesigned web UI, and a health check CI gate by @RaghavChamadiya in #4316

New Contributors

Full Changelog: v0.57.0...v0.58.0