Skip to content

v0.61.0

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Nov 16:03
0b2e2ad

What's Changed

  • fix(cli): emit error key on missing id in decision show json (#5046) by @ANO3457 in #5067
  • fix(test_reach): avoid quadratic sibling test ownership matching by @mvanhorn in #5300
  • fix(cobol): parse a doubled quote inside a double-quoted literal by @canblmz1 in #4490
  • fix(decisions): align comment mining token budget by @PranavSood06 in #5194
  • fix(core): recognize Ragel Java output as generated by @Pratham2511 in #4809
  • fix(health): use finding judged severity in Extract Method worthiness gate (#4148) by @rishu685 in #5252
  • fix(ingestion): resolve Kotlin bare require and check calls against class declarations (#4968) by @rishu685 in #5254
  • fix(ingestion): keep C# awaited call assignments followed by ConfigureAwait (#4971) by @rishu685 in #5256
  • fix(health): count match-arm guards, Rust if-let chains and exclude Go range (#4791) by @rishu685 in #5257
  • feat(external-systems): link Java/Kotlin imports to Maven coordinates by @Aman-goel-04 in #4601
  • fix(dead-code): rescue Swift files whose top-level func or operator is used (#3857) by @Aman-goel-04 in #4151
  • fix(server): count job progress per phase so concurrent phases stay coherent by @jgt87 in #4740
  • fix(health): measure named arrow functions as units and drop nested NLOC by @jgt87 in #4619
  • fix(server): onboarding targets are production code files; template pages are not documentation (#4567) by @Aman-goel-04 in #4596
  • fix(workspace): keep a Go call to a service's root path as a consumer by @Aman-goel-04 in #4595
  • fix(workspace): match a concrete path segment to a route {param} by @Aman-goel-04 in #4734
  • feat(mcp): report lines_total and note count on empty omission ref query (#4998) by @left-big-toe-of-oppenheimer in #5018
  • feat(plugins): add a Cursor plugin for the Repowise MCP server by @RaghavChamadiya in #5312
  • chore(registry): list the hosted MCP endpoint in server.json by @RaghavChamadiya in #5311
  • fix(update): bind stage-resolved state types by @HengYangDS in #5328
  • feat(embeddings): support Gemini Embedding 2 retrieval by @sera527 in #5104
  • fix(cli): report missing lancedb in doctor when a real embedder is configured by @phatloi0010 in #5236
  • fix(cli): fail update when sync base commit is unreachable in git history by @phatloi0010 in #5238
  • fix(doctor): flag missing member state.json in workspace --repair by @AryanSingh2029 in #5245
  • fix(coordinator): stop counting tombstones as pages in the drift report by @2233admin in #5289
  • fix(plugins): align pre-modification skill name with directory name and enforce name/dir match by @Hardik01363 in #5323
  • fix(decisions): merge into a decision confirmed with evidence by @nazarli-shabnam in #5343
  • fix(cli): reject deterministic onboarding pages on generate --page (#5320) by @ANO3457 in #5321
  • fix(mcp): add NO_HITS_RECOVERY_HINT to empty search_codebase concept replies by @Asymtode712 in #5007
  • feat(mcp): keep a local tool latency log and show p50/p90 in status by @Asymtode712 in #5022
  • feat(workspace): read Dapr pub/sub topics in Java, JS, Python and Go by @thymeed in #4806
  • fix(gemini): include thinking tokens in output cost by @Vamsi-2581 in #5165
  • fix(init): record decision mining cost in llm_costs and the init cost line by @RagedPanda in #5174
  • fix(java): bind a static import to a method the named type inherits by @macholul in #5190
  • fix(ingestion): treat method type variable as type parameter even when repo class shares name (#4972) by @karnavagarwal in #5260
  • test(cli): restore embedder environment after serve seeding by @HengYangDS in #5352
  • perf(update): patch the graph for documentation edits, adds and removals by @RaghavChamadiya in #5282
  • perf(graph): cache per-file framework scans across updates by @RaghavChamadiya in #4894
  • perf(update): patch the graph when source files are added, removed or change surface by @RaghavChamadiya in #5374
  • perf(graph): resolve each TS file's imports once per framework pass by @RaghavChamadiya in #5375
  • fix(update): make an update write the same store as a fresh init by @RaghavChamadiya in #5387
  • fix(workspace): close every repository index when closing is cancelled by @jsolemd in #5386
  • feat(update): refresh Git history without rebuilding docs by @HengYangDS in #5329
  • test(distill): isolate synchronous pricing transcript scans by @HengYangDS in #5355
  • fix(update): refresh knowledge-graph entries for changed files and match init's commit coverage by @RaghavChamadiya in #5395
  • perf(update): patch the graph when a doc is added or removed beside a same-stem file by @RaghavChamadiya in #5396
  • fix(decisions): stop supersede aliasing the old id to its successor by @nightious in #5332
  • fix(ingestion): read Astro <script src> and as imports by @nightious in #4720
  • ci: stage Apex and COBOL grammars before the unit tests by @RaghavChamadiya in #5400
  • fix(decisions): delete the stale supersede pointers older versions left by @nightious in #5392
  • fix(mcp): serve an indexed non-member beside the workspace members as its own repo by @nightious in #5336
  • fix: retry failed decision-mining sources from their own range by @msranjana in #5096
  • fix(embedding): send the declared width to OpenRouter by @jgt87 in #5383
  • perf(update): patch the graph for config edits that cannot change it by @RaghavChamadiya in #5397
  • fix(reindex,doctor): keep tombstoned pages out of reindex and coordinator drift by @ggiannotti in #3978
  • fix(decisions): apply folded keepers and skip superseded wording on import by @nightious in #5393
  • docs(plugins): list community plugins, starting with the MarkItDown PDF extractor by @RaghavChamadiya in #5398
  • feat(persistence): apply plugin storage revisions after the core schema by @jsolemd in #5391
  • fix(decisions): list reaffirmed entries in the import summary by @nightious in #5394
  • fix(grammars): retry transient grammar downloads and report the ones that fail by @RaghavChamadiya in #5401
  • perf(ingestion): probe tsconfig alias candidates without a resolve per path by @RaghavChamadiya in #5403
  • perf(git): reuse cached commit records by sha so updates diff only new commits by @RaghavChamadiya in #5404
  • perf(update): keep files with no grammar from forcing a full graph rebuild by @RaghavChamadiya in #5405
  • perf(update): stop re-scanning commits that store no commit-health row by @RaghavChamadiya in #5406
  • perf(update): splice duplication in process and batch changed graph rows by @RaghavChamadiya in #5407
  • test: make the post-commit hook fake install write atomically by @RaghavChamadiya in #5425
  • fix(health): serve C++ health findings without the preview label by @RaghavChamadiya in #5447
  • fix(plugins): say which files --scope production leaves out by @RaghavChamadiya in #5450
  • fix(health): price Fix first gains with the hidden findings a file still counts by @RaghavChamadiya in #5453
  • test(health): pin health metrics for C, Dart, Scala, Ruby, PHP, F#, ObjC, Razor and Vue/Svelte by @RaghavChamadiya in #5454
  • fix(health): do not judge Rust trait impls as god classes by @RaghavChamadiya in #5443
  • fix(health): stop calling empty handlers for expected Python exceptions swallowed by @RaghavChamadiya in #5430
  • fix(health): C and C++ pointers, buffers and SAL annotations are not primitive parameters by @RaghavChamadiya in #5427
  • fix(health): open no nesting level for a Swift guard statement by @RaghavChamadiya in #5439
  • fix(health): say what complex_method measures, not that a function is too complex by @RaghavChamadiya in #5444
  • fix(health): keep import-like headers out of clone hashing for Ruby, shell, Kotlin, C# and PHP by @RaghavChamadiya in #5458
  • fix(health): stop flagging except Exception handlers that log the failure by @RaghavChamadiya in #5431
  • fix(health): read a case arm's condition from its label, not its body by @RaghavChamadiya in #5457
  • feat(health): let a marker be advisory for one language by @RaghavChamadiya in #5436
  • fix(health): count multi-line string continuation lines as data in large_method by @RaghavChamadiya in #5435
  • fix(health): read PHP parameter types and hold untyped JavaScript signatures to seven parameters by @RaghavChamadiya in #5448
  • fix(health): keep a negated list of flags or one subject flat in complex_conditional by @RaghavChamadiya in #5452
  • fix(health): stop flagging Rust panics in main, unshipped code and on literal inputs by @RaghavChamadiya in #5433
  • feat(health): list cold-path loop perf markers without scoring them by @RaghavChamadiya in #5434
  • fix(health): read Swift parameter types and treat Cocoa callbacks as fixed signatures by @RaghavChamadiya in #5459
  • fix(health): do not judge Ruby modules without initialize as god classes by @RaghavChamadiya in #5446
  • fix(health): rest, keyword and Dart named parameters in primitive_obsession by @RaghavChamadiya in #5445
  • fix(health): count a switch's simple arms once and its default arm never by @RaghavChamadiya in #5455
  • fix(ingestion): stop linking C and C++ function-pointer hints to unreachable definitions by @RaghavChamadiya in #5449
  • fix(health): count a run of error guards once in the judged CCN by @RaghavChamadiya in #5428
  • fix(health): stop counting Scala DSL and Pascal bitwise and/or as decisions by @RaghavChamadiya in #5429
  • fix(health): count F# && and || so complex_conditional can fire by @RaghavChamadiya in #5437
  • fix(health): read dispatch subjects through predicate calls and type tests by @RaghavChamadiya in #5471
  • fix(health): stop flagging Go strconv fallbacks and blanked writes as swallowed errors by @RaghavChamadiya in #5432
  • fix(health): count literal table rows as data in large_method by @RaghavChamadiya in #5441
  • fix(health): stop counting #if and #elif conditions as runtime branches by @RaghavChamadiya in #5461
  • fix(origin): read the test-tree language off the extension for a path-only caller by @RaghavChamadiya in #5451
  • fix(health): hold untyped Vue and Svelte script signatures to the JavaScript threshold by @RaghavChamadiya in #5456
  • fix(health): JVM signatures a framework or the compiler owns are not long parameter lists by @RaghavChamadiya in #5440
  • fix(health): count SwiftUI, Compose and Flutter view trees as markup in large_method by @RaghavChamadiya in #5442
  • feat(health): make low-precision markers advisory per language by @RaghavChamadiya in #5463
  • fix(health): give Rust, Go, Ruby and PHP constructors their parameter grace by @RaghavChamadiya in #5438
  • fix(health): count a run of guarded field copies once in the judged CCN by @RaghavChamadiya in #5464
  • fix(health): methods a same-file interface, trait or protocol declares keep its signature by @RaghavChamadiya in #5460
  • fix(health): count switch arms that only return a literal as data in large_method by @RaghavChamadiya in #5466
  • fix(health): count a run of plain early-exit guards once in the judged CCN by @RaghavChamadiya in #5462
  • fix(health): count builder chain settings with literal arguments as data in large_method by @RaghavChamadiya in #5468
  • fix(health): count a run of optional setters once in the judged CCN by @RaghavChamadiya in #5467
  • fix(augment): avoid double terminal punctuation in edit decision notice by @SKC999 in #5381
  • fix(cli): cleanup expired augment dedup markers in temp dir by @omseervi098 in #5376
  • fix(hooks): run the stale-wiki check after pull, merge, rebase and cherry-pick on Claude Code by @DaniyalMughal1 in #5382
  • feat(cli): report blockers and next confirmation command on decision add json (#5045) by @ANO3457 in #5134
  • get_why dashboard: say why each stale decision is stale by @mercael91 in #5012
  • feat(decisions): an agent's decision governs once its commit lands by @RaghavChamadiya in #5499
  • fix: treat stale hosted session as doctor warning by @ZhangDT-sky in #5237
  • fix(cli): report live git coverage in status by @Vamsi-2581 in #5224
  • fix(doctor): warn when index data is stale or git tables are empty by @RagedPanda in #5225
  • fix(cli): consult repo .env during embedder choice resolution (#5326) by @karnavagarwal in #5347
  • fix(mcp): report timed-out branch overlap scans and skip payload caching by @Rohan-Dedhia in #5356
  • fix(cli): recover from corrupt state json by @ZhangDT-sky in #5274
  • fix(mcp): resolve decision id prefixes and alias prefixes in get_why (#5335) by @karnavagarwal in #5346
  • fix(core): respect repo pinned embedding_model in embedder_kwargs and resolve (#5324) by @ANO3457 in #5417
  • fix(answer): read text files over 2 MB in the literal line scan by @RaghavChamadiya in #5281
  • feat(health): make low_cohesion advisory, and dry_violation and error_handling outside TypeScript and Python by @RaghavChamadiya in #5426
  • feat(decisions): mined records are background; update mines only on request by @RaghavChamadiya in #5502
  • feat(hooks): read the main checkout's index from a git worktree that has none by @RaghavChamadiya in #5510
  • feat(decisions): get_why on a path leads with constraints, history on request by @RaghavChamadiya in #5504
  • feat(decisions): get_answer reads the decisions in force for why questions by @RaghavChamadiya in #5505
  • feat(decisions): an agent's discovery pass over the background records on the busiest files by @RaghavChamadiya in #5506
  • feat(decisions): optional sync with repowise.dev, and keep decisions.yaml current by @RaghavChamadiya in #5501
  • feat(decisions): a digest page with pin, veto and edit, and a recent section in status by @RaghavChamadiya in #5509
  • feat(decisions): spend decision tokens only where a decision governs by @RaghavChamadiya in #5507
  • feat(decisions): ask an agent to settle the decisions its commit touches, off by default by @RaghavChamadiya in #5508
  • feat(decisions): count how often agents are shown each decision by @RaghavChamadiya in #5511
  • feat(decisions): one switch for the layer, and docs for how it works by @RaghavChamadiya in #5517
  • feat(settings): one registry for every setting by @RaghavChamadiya in #5519
  • docs(config): generate CONFIG.md's key and variable tables from the settings registry by @RaghavChamadiya in #5520
  • feat(settings): repowise config list, get, explain, set and reset by @RaghavChamadiya in #5521
  • perf(persistence): add repository predicate on joined graph_nodes in tests_in_files (#5342) by @karnavagarwal in #5345
  • fix(persistence): refresh PostgreSQL planner statistics after bulk writes by @Nani-2007-code in #5360
  • fix(health): class llparse-generated C output as generated by @munjikesh in #5500
  • fix(ui): keep the page still while the job log follows new lines by @jgt87 in #5470
  • fix(health): skip go_swallow when the blanked last result is a bool (strings.Cut, runtime.Caller) by @sarankumar1325 in #5486
  • fix(origin): classify root .repos/ clones as vendored by @bfs2021 in #5337
  • perf(ingestion): find preceding docstrings with prev_sibling by @pramukhbhushan in #5344
  • fix(tests): expect init to refuse a commit limit above the maximum by @RaghavChamadiya in #5535
  • fix(persistence): add opt-in Postgres keepalive and command timeout by @Aschenbath in #5390
  • fix(pipeline): mark jobs left running by a dead run as failed on the next start by @RagedPanda in #5349
  • feat(ci): post the gate summary as one GitLab merge-request note by @RaghavChamadiya in #5527
  • feat(server): fetch and fast-forward a server-owned checkout before each sync by @RaghavChamadiya in #5528
  • fix(claude-cli): say why pages failed when the CLI is not signed in by @RaghavChamadiya in #5532
  • fix(cpp): stop CMake variable expansion from doubling self-appending values by @RaghavChamadiya in #5533
  • perf(mcp): answer the first tool call without waiting on unused work by @RaghavChamadiya in #5537
  • feat(scale): full git history, a complete skipped-file list and a large-monorepo guide by @RaghavChamadiya in #5529
  • feat(mcp): fact row and direct test links on symbol cards, class lookups as member signatures by @RaghavChamadiya in #5536
  • feat(mcp): serve every edit site of a symbol as line numbers per file by @RaghavChamadiya in #5538
  • fix(doctor): report index freshness and a stuck update lock by @RagedPanda in #5239
  • fix(update): read stored health data from a configured database by @burntcookiedough in #5399
  • fix(costs): group daily costs on SQLite and PostgreSQL by @Yushu-Li in #5223
  • fix(persistence): serialize schema creation across processes on PostgreSQL by @RaghavChamadiya in #5542
  • feat(mcp): give every in-band tool error a reason, and stop filing deliberate exits as faults by @RaghavChamadiya in #5541
  • feat(settings): tell agents where every setting lives by @RaghavChamadiya in #5522
  • feat(settings): one settings page for every setting by @RaghavChamadiya in #5524
  • feat(mcp): get_answer reaches Markdown documents through the live line scan by @RaghavChamadiya in #5539
  • feat(settings): suggest the settings that fit this repo by @RaghavChamadiya in #5523
  • feat(settings): suggest commit window, excludes and file pages for large repos by @RaghavChamadiya in #5549
  • fix(health): health check classifies generated files with code_origin by @RaghavChamadiya in #5551
  • feat(mcp): serve a workspace from one configured database by @RaghavChamadiya in #5555
  • feat(doctor): check every setting against the settings registry by @RaghavChamadiya in #5550
  • fix(health): widen performance_opportunities.cost_proof so PostgreSQL stores background_unproven by @RaghavChamadiya in #5556
  • perf(test-selection): walk an owner-package scope as one unit by @RaghavChamadiya in #5554
  • docs(scale): add the ClickHouse full-history row to the large monorepo sizing table by @RaghavChamadiya in #5557
  • fix(update): keep the graph snapshot when a file has never parsed by @RaghavChamadiya in #5558
  • fix(cli): ask reads the other workspace repos, as the MCP tool does by @RaghavChamadiya in #5559
  • feat(cli): set up hosted Repowise from the terminal by @RaghavChamadiya in #5553
  • fix(persistence): rank git percentiles once on PostgreSQL instead of once per row by @RaghavChamadiya in #5560
  • perf(persistence): analyze only stale tables on PostgreSQL after a write by @RaghavChamadiya in #5561
  • fix(search): serve every repo's line hits for repo="all" by @RaghavChamadiya in #5562
  • feat(answer): a ticket asked about by its key serves its opening lines by @RaghavChamadiya in #5563
  • refactor(review): drop the pull request change kind no server lists by @RaghavChamadiya in #5570
  • fix(review): severity in words, one status line per outcome, and an axe check by @RaghavChamadiya in #5571
  • feat(review): score and select tests for a listed change with the risk engine by @RaghavChamadiya in #5572
  • perf(git): read deep history regions in parallel and bound git's pack memory by @RaghavChamadiya in #5574
  • perf(update): reuse the fix walk and community partitions an earlier run computed by @RaghavChamadiya in #5575
  • perf(health): walk files in spawn workers instead of threads by @RaghavChamadiya in #5576
  • feat(review): lead the Review page with the verdict, the change risk and what to check by @RaghavChamadiya in #5579
  • perf(update): patch the graph for C and C++ edits instead of rebuilding it by @RaghavChamadiya in #5582
  • feat(review): the Review page as Markdown for coding agents by @RaghavChamadiya in #5568
  • fix(update): keep the graph snapshot when an unparsed file lost no rows by @RaghavChamadiya in #5585
  • perf(health): walk an update's cache misses in spawn workers by @RaghavChamadiya in #5584
  • feat(review): open a merge or pull request by number, pinned to its commits by @RaghavChamadiya in #5578
  • fix(answer): risk-of-change questions no longer take the data-shape shortcut by @RaghavChamadiya in #5606
  • feat(overview): give no-prose indexes a real summary and answer an unindexed repo by @RaghavChamadiya in #5591
  • fix(health): list five findings per targeted call by default, and stop leaking internals by @RaghavChamadiya in #5600
  • perf(update): run each graph warmup once per context and scan spelled names faster by @RaghavChamadiya in #5604
  • perf(update): rescan only changed C and C++ files for dynamic hints by @RaghavChamadiya in #5583
  • feat(upgrade): name a signed-in Claude Code plan in the one keyless upgrade line by @RaghavChamadiya in #5598
  • fix(mcp): drop what every response repeats but no agent acts on by @RaghavChamadiya in #5595
  • feat(telemetry): report index mode, provider kind, stage timings and outcomes on tool calls, init and generate by @RaghavChamadiya in #5587
  • feat(mcp): list the core tools to clients that load every schema up front by @RaghavChamadiya in #5589
  • feat(editor-files): lead the agent block with one call-first line and hold it to a budget by @RaghavChamadiya in #5586
  • perf(review): page the files a change reaches and keep its review per commit by @RaghavChamadiya in #5580
  • feat(search): read grep alternations and regexes as written, and say once when keyless rows are keyword matches by @RaghavChamadiya in #5592
  • feat(generate): use a signed-in agent CLI when no provider is set, and save the provider once it writes a page by @RaghavChamadiya in #5599
  • fix(upgrade): time the upgrade line by every call generate makes by @RaghavChamadiya in #5610
  • fix(agents): point Codex prompts at tools Codex is listed by @RaghavChamadiya in #5611
  • fix(answer): give the page digest its own slot in the synthesis excerpt by @RaghavChamadiya in #5594
  • perf(answer): stop get_answer waiting on episode git queries, keep keyless replies by @RaghavChamadiya in #5605
  • perf(update): cheaper render, doc drift, traverse and dead-code stages on a small update by @RaghavChamadiya in #5609
  • perf(update): keep the production file partition when only test or example files change by @RaghavChamadiya in #5607
  • fix(editor-files): name only the tools an AGENTS.md reader's client is listed by @RaghavChamadiya in #5608
  • feat(plugin): list only what the agent acts on, and say only what is new at session start by @RaghavChamadiya in #5590
  • fix(agents): count only a Claude Code plugin that loads in this repo by @RaghavChamadiya in #5614
  • fix(agents): point Codex skills at tools Codex is listed by @RaghavChamadiya in #5612
  • perf(dead-code): keep each file's scanned tokens between runs by @RaghavChamadiya in #5613
  • fix(onboarding): tell each agent what it is listed, and name the plan route in the model sheet by @RaghavChamadiya in #5615
  • fix(cli): preserve saved file page cap during refresh by @HengYangDS in #5488
  • fix(cli): record completed full-upgrade inputs by @HengYangDS in #5503
  • fix(doc-drift): resolve a Markdown link relative to its document (#5473) by @nightious in #5495
  • fix(graph): keep co_changes out of the server's coupling counts (#5472) by @nightious in #5496
  • fix(graph): keep co_changes out of decision centrality, the --test-run rank and the cascade (#5472) by @nightious in #5497
  • feat(ingestion): declare the documents edge type and filter it from code analyses (#5418) by @nightious in #5498
  • feat(ingestion): emit documents edges from Markdown (#5418) by @nightious in #5465
  • feat(update): make update --full leave nothing stale on a full index by @RaghavChamadiya in #5617
  • perf(mcp): lean search lines and one keyless get_answer shape by @RaghavChamadiya in #5616
  • feat(mcp): serve the call path around a named symbol on keyless flow questions by @RaghavChamadiya in #5620
  • fix(communities): restore the file partition cache key after #5498 by @RaghavChamadiya in #5623
  • fix(update): ensure api_contract pages are tombstoned and covered by tests by @rishu685 in #5543
  • fix(security): ignore lowercase reference paths in credential value filter by @rishu685 in #5546
  • fix(code_origin): detect vendored JS libraries under resources/ directories by @rishu685 in #5545
  • fix(health): recover Razor @code method start_line after attributed properties by @rishu685 in #5544
  • fix(perf): implement IterableSources loop-source reader for Dart by @rishu685 in #5547
  • fix(ingestion): type Kotlin destructured locals from componentN() (#4847) by @Aman-goel-04 in #5295
  • fix(dead-code): root Celery autodiscover modules and Airflow DAG files (#4467) by @Aman-goel-04 in #5297
  • feat(workspace): read Python f-string calls, imported clients, base_url (#4516) by @Aman-goel-04 in #5298
  • feat(workspace): read DRF router and aiohttp routes as providers (#4516) by @Aman-goel-04 in #5299
  • fix(pipeline): ignore deleted files when superseding module pages (#4903) by @Aman-goel-04 in #5296
  • fix(health): detect swallowed_catch in Ruby, Swift, Dart and Scala (#4793) by @Aman-goel-04 in #4832
  • fix(init): include hotspots in the generation plan by @gelatoni-xh in #5388
  • fix(health): read F# type names in class findings by @laozhej in #5494
  • fix(health): stop measuring F# module and class values as functions by @tridev-tej in #5489
  • fix(dead-code): read flit and uv_build modules as published packages by @shounakjoshi88-a11y in #5423
  • fix(health): count Objective-C method selector parameters by @sarankumar1325 in #5490
  • fix(health): count C++ out-of-line method definitions toward class (#4789) by @rishu685 in #5258
  • fix(cli): impacted-tests --format list says "run every test" in one line by @RaghavChamadiya in #5619
  • fix(decisions): guard imports with per-entry base tokens by @Aschenbath in #5419
  • fix(pipeline): retire module pages the plan no longer yields (#4903) by @Aman-goel-04 in #5302
  • fix(persist): commit one domain at a time in persist_result (#5338, slice 1) by @raphaelbahat in #5564
  • fix(init): hold the update lock as well as the init marker (#5512) by @raphaelbahat in #5593
  • perf(cli): faster symbol/path search, symbol and context by @RaghavChamadiya in #5618
  • fix(analysis): handle staged submodule index specs in cat_file_batch (#5304) by @rishu685 in #5305
  • fix(cli): live reads use the served checkout, not the stored path by @RaghavChamadiya in #5621
  • fix(mcp): server instructions name only tools the client is served by @RaghavChamadiya in #5622
  • refactor(analysis): make the helpers published_packages.py imports public by @athena2250 in #5373
  • read Temporal task queues as worker and client contracts by @Aman-goel-04 in #4730
  • fix(ingestion): resolve repeated methods in call chains without line-key collision (#4849) by @rishu685 in #5255
  • feat(ingestion): parse source files between 2 MB and 8 MB serially (#5280) by @rishu685 in #5294
  • fix(dead-code): qualify Swift files used by unindexed sources by @Aschenbath in #5290
  • feat(workspace): read Redis streams, and Redis pub/sub in Go, Java and .NET by @Aman-goel-04 in #4834
  • fix(ingestion): bind bare calls in Kotlin extensions to the receiver's members first by @Aman-goel-04 in #4867
  • feat(mcp): opt-in mcp.always_load keeps the core read tools loaded in Claude Code by @RaghavChamadiya in #5624
  • fix(mcp): say the tests to run are listed likeliest to fail first by @RaghavChamadiya in #5625
  • fix(graph): let the parse own an edited file's containment edges on patch by @RaghavChamadiya in #5411
  • fix(update): keep an update with no new commit a no-op when the last run left pages stale by @RaghavChamadiya in #5581
  • fix(mcp): references are not complete when a module object may hide a call by @RaghavChamadiya in #5632
  • chore(deps): bump litellm to 1.100.5 for GHSA-7hp6-4w63-5g45 by @RaghavChamadiya in #5630
  • feat(core): list the .repowise files an update reuses by @RaghavChamadiya in #5631
  • fix(graph): keep seeded edges out of the type-ref defined-name index by @RaghavChamadiya in #5409
  • fix(tests): wait for the Undo button to re-enable after a refused undo by @RaghavChamadiya in #5251
  • fix(web): keep the Code Health view on screen when a Fix first item is triaged by @deven1003 in #5552
  • fix(ingestion): exclude TypeScript interface and type properties from variable declarations (#5318) by @rishu685 in #5319
  • fix(update): re-score on the first update after an upgrade by @RaghavChamadiya in #5638
  • fix(update): keep one commit-health drain waiting per repo, with a hard time cap by @RaghavChamadiya in #5639
  • fix(search): keep the configured embedder and per-repo fulltext on multi-repo servers by @RaghavChamadiya in #5640
  • test: run the web suite in CI and skip COBOL tests at run time by @RaghavChamadiya in #5641
  • fix(status): count Git coverage over the same files as its denominator by @RaghavChamadiya in #5633
  • fix(mcp): list the single-repo tools when the server serves a single repo by @RaghavChamadiya in #5635
  • fix(mcp): answer a bad status or plan id in set_finding_status as an argument error by @RaghavChamadiya in #5636
  • fix(cli): show a path's background records and history pointer in repowise why by @RaghavChamadiya in #5637
  • fix(generation): regenerating repo-wide pages no longer re-stales the others by @ugoenyioha in #5515
  • fix(tour): open on the primary README, not a translation by @ugoenyioha in #5516
  • fix(health): count F# elif arms in cyclomatic complexity by @sarankumar1325 in #5487
  • fix(cursor): pin the afterFileEdit capture hook to repowise-augment (#5364) by @Aditya-XR in #5548
  • fix(core): treat docs_src/ and root benchmark/ as support paths (#5369) by @ANO3457 in #5389
  • test: make test_code_health_read_failure_degrades_to_an_empty_block independent of import order by @HarshRajSinghania in #5372
  • fix(mcp): load numpy before the stdio transport reads stdin, and bound the keyless upgrade line by @RaghavChamadiya in #5647
  • fix(update): keep measured symbol complexity on files the update does not analyse by @RaghavChamadiya in #5649
  • fix(mcp): send each client the instructions for the tools it is listed by @RaghavChamadiya in #5644
  • fix(init): plan the pages generation writes by @RaghavChamadiya in #5646
  • perf(answer): ask each episode check once per get_answer call by @RaghavChamadiya in #5650
  • fix(hooks): Codex hook text names only what the tools Codex is listed are for by @RaghavChamadiya in #5651
  • perf(mcp): answer get_change_risk on a range past the file ceiling without the expensive work by @RaghavChamadiya in #5652
  • fix(test-selection): stop a timed-out selection between its graph walks by @RaghavChamadiya in #5653
  • fix(update): keep decorator edges when one decorated file is reconciled by @RaghavChamadiya in #5661
  • release: v0.61.0, agents that carry less and get more, decisions that govern, every setting in one place by @RaghavChamadiya in #5662

New Contributors

Full Changelog: v0.60.1...v0.61.0