Skip to content

2.2.7

Choose a tag to compare

@Wellington01 Wellington01 released this 20 Oct 11:41
· 217 commits to main since this release
25635e4

Changelog - kodustech/kodus-ai

2026-10-04 - 2026-10-20

πŸ› Bug Fixes

πŸ“š Documentation

  • #2079 docs: match the docs to the redesigned web app (@malinosqui) πŸ“¦ Released in web-1.2.7

    What - 89 pages Γ— 5 languages (en, es, pt-BR, ja, zh) now follow the new UI: sidebar nav, the five Code review pages, AI providers (Providers / Routing / Budget), Repositories, members ...

πŸ”§ Chores

  • #2082 chore: remove plans, studies and stale internal docs (@malinosqui) πŸ“¦ Released in web-1.2.7

    Summary Removes plans, research notes, competitive studies, session notes and stale internal docs (60 files, mostly pt-BR). Plans and design notes live in GitHub issues from now on; `docs/README.md...

  • #2081 chore: replace customer identifiers with placeholders (@malinosqui) πŸ“¦ Released in web-1.2.7

    Summary Replaces real customer identifiers in comments, docs, test fixtures and the SSO e2e hostnames with neutral placeholders (acme, customer, a fake repo id), and removes the one-off `script...

πŸ“¦ Other Changes

  • #2181 fix(code-review): shorter suggestion bodies, rewritten titles and anchors on the defective lines (@Wellington01) ⏳ Not yet released
    Refs #2157 (items 1, 2, 4, 5 and the dedup half of 3; the GitLab anchor is not in this PR). What changed - Formatter prompt: drops "keep every technical detail … line numbers" (the !58 trace shows...

    • Closes #2157: Concise suggestion comments: long bodies, out-of-diff references, wrong anchors, cut titles and lowercase prompt text
    • Closes #174: adding server filters for prs
    • πŸ‘€ Reviewed by: @kody-ai[bot], @malinosqui
  • #2173 fix(code-review): never publish unverified findings or read an unfinished agent as complete (@Wellington01) ⏳ Not yet released
    Fixes #2171 Β· design: #2171 (comment) What changed - Finder runs that end without a submitted result (out of steps, or turn truncated by t...

    • Closes #2171: Review reads as complete and publishes unverified findings when the finder never submits or the verify call fails
    • πŸ‘€ Reviewed by: @kody-ai[bot], @malinosqui
  • #2183 fix(code-review): check suggestion implementation when a review finishes (@sartorijr92) ⏳ Not yet released

    Summary Suggestions fixed by a commit pushed during a review now turn implemented: the review enqueues the implementation check once its execution is persisted. Closes #2182. ## Eval evidence

    • Closes #2182: Suggestions fixed by a commit pushed during the review stay not_implemented
    • Closes #359: Export Kody Issue to Project Management Tool
    • Closes #358: Allow BYOK setup in Managed plan (including Trial)
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2178 feat(evals): experiments for every kind of change (@malinosqui) ⏳ Not yet released

    Eval evidence - Proof: no review step changes, so no metric moves; the experiment command itself, end to end on the scripted model (no cost): finder, branch vs base and team config off vs on, each ...

  • #2176 fix(evals): each experiment run keeps its own rows (@malinosqui) ⏳ Not yet released
    An experiment's rows were named after the branch alone (experiments.<step>.<phase>.<eval>.<branch>), so a later run on the same branch overwrote the rows it wrote and left the rest. A regression-onl...

  • #2174 feat(evals): experiments on a review step, and the dedup's grouping eval (@malinosqui) ⏳ Not yet released
    Compares a review step on two versions of production's code, answering "did it break anything?" and then "is it better?": locally (node evals/experiment.js --step=<step>), on a PR that changes the s...

  • #2168 test(evals): every eval on production's code and route (@malinosqui) ⏳ Not yet released
    Every eval runs production's own code on the BYOK route an org that picks its model takes (evals/shared/model-route.js). Each review step declares what it does, its tests and its eval (`evals/stages...

  • #2161 fix(web): open inherited repository settings directly (@malinosqui) ⏳ Not yet released
    Connected repositories without overrides were hidden from settings and direct links redirected to Global. Fixes #2167. Eval evidence: [PR wiring smoke](https://github.com/kodustech/kodus-ai/actions/ru...

  • #2162 fix(identity): complete invitations and allow removing members (@Wellington01) ⏳ Not yet released
    Refs #2103 - Accepting an invitation answered 404 and left the user ACTIVE without a profile: UserDatabaseRepository.update re-read the row with the update filter, whose status: PENDING no lon...

    • Closes #2103: Accepting an invitation fails silently and the link then shows as expired (since 2.2.6)
    • πŸ‘€ Reviewed by: @kody-ai[bot], @malinosqui
  • #1979 chore(runo): every runo env runs the real billing, and Checkout reaches it (@malinosqui) ⏳ Not yet released
    Runo dev environments and cloud previews run the billing service with a Stripe test webhook forwarder, so Checkout can update the plan. - Share billing through docker-compose.billing.yml; preserve t...

  • #2155 fix(settings): saving a settings tab no longer reverts values saved elsewhere (@jairo-litman) ⏳ Not yet released
    Closes #2153. Saving any code-review settings tab no longer reverts values just saved elsewhere (Kody Rules toggles, other tabs, other browser tabs). What changed - saveSettings sends only the field...

  • #2154 fix(evals): finder eval runs production's input, route and scoring (@malinosqui) ⏳ Not yet released
    Part of #2114. Ports the finder-parity pieces of feat/improve-harness-to-big-models (its datasets byte-identical, its RECALL_CATEGORIES / RECALL_MAX_STEPS names kept) so that branch rebases clea...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #2146: feat(evals): post-finder stages measured on a frozen finder snapshot
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2145 feat(evals): conversation eval checks Kody's thread replies (@malinosqui) ⏳ Not yet released
    Part of #2114 (design). Builds on #2144 (merged). Eval evidence - Run: [nightly on the top of the stack](https://github...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #2144: feat(evals): PR summary joins the nightly, checks it speaks of the diff
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2144 feat(evals): PR summary joins the nightly, checks it speaks of the diff (@malinosqui) ⏳ Not yet released
    Part of #2114 (design). Builds on #2143 (merged). Eval evidence - Run: [nightly on the top of the stack](https://github...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #2143: feat(evals): memories eval checks the review follows team memories
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2152 feat(evals): record each stage's model cost and time (@malinosqui) ⏳ Not yet released
    Part of #2114. The panel side is kodustech/kodus-quality#14. Eval evidence - Proof: tokens and time of each model call on evals/reply-addressing (10 cases), main records input/output/cache-read to...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #14: Fix/improve-error-handling-on-cron
    • Closes #2142: feat(evals): format eval runs the real formatter on recorded findings
    • Closes #2146: feat(evals): post-finder stages measured on a frozen finder snapshot
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2143 feat(evals): memories eval checks the review follows team memories (@malinosqui) ⏳ Not yet released
    Part of #2114 (design). Builds on #2142 (merged). Eval evidence - Run: [nightly on the top of the stack](https://github...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #2142: feat(evals): format eval runs the real formatter on recorded findings
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2142 feat(evals): format eval runs the real formatter on recorded findings (@malinosqui) ⏳ Not yet released
    Part of #2114 (design). Builds on #2141 (merged), reading its recorded findings. Eval evidence - Run: [nightly on the t...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #2141: feat(evals): parse eval replays how production models end finder runs
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2141 feat(evals): parse eval replays how production models end finder runs (@malinosqui) ⏳ Not yet released
    Part of #2114 (design). Eval evidence - Run: [branch nightly](https://github.com/kodustech/kodus-ai/actions/runs/388355...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #2112: Finder drops findings when submitResult omits a field, sends null, or sends suggestions as a JSON string
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2137 fix(code-review): keep a problem already commented on the PR off later rounds (#2097) (@malinosqui) ⏳ Not yet released
    Eval evidence: review-rounds, local runs committed in results/2026-10-16 (main's numbers in...

  • #2136 fix(llm): OpenAI reasoning models with tools reach /v1/responses (@malinosqui) ⏳ Not yet released
    Fixes #2135 (design). Eval evidence Proof: tier-0 review on gpt-6-sol (self-hosted env route), main broken -> branch pa...

  • #2132 ci(evals): the tier-0 Kimi runs through OpenRouter (@malinosqui) ⏳ Not yet released
    Part of #2114. Eval evidence Proof: Friday parts that run on Kimi, main 0 of 4 (Moonshot account suspended) -> branch 4 of 4 pass

  • #2131 feat(evals): Friday runs every stage the nightly measures (@malinosqui) ⏳ Not yet released
    Part of #2114. Follows #2129. Eval evidence Proof: Friday stages run per model on deepseek-v4-flash@fireworks, main 2 (review, summary) -> branch 4 (+ kody-rules 10/10, reply-addressing 16/16)

  • #2129 feat(evals): one nightly job for any eval; Thread replies measured (@malinosqui) ⏳ Not yet released
    One nightly job measures any eval listed in evals/nightly-evals.js, and Thread replies (reply-addressing) is the first one on it (#2114). ## Eval evidence - Local, DeepSeek V4 Flash, cases.json ...

  • #2127 feat(evals): every eval lists what it tests; pnpm eval:new (@malinosqui) ⏳ Not yet released
    Every eval now lists what it tests, and pnpm eval:new creates a new eval in the shared shape, so it reaches the quality panel without anyone editing the panel (#2114). ## Eval evidence - No eval mea...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #1970: chore(evals): delete scripts nothing runs any more
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2124 ci(evals): measure Kody Rules every night on DeepSeek (@malinosqui) ⏳ Not yet released
    Kody Rules becomes the second stage measured every night, and every eval gets one result shape that the quality panel reads (#2114, [plan](#2114 (comment)...

    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • Closes #10: WIP Feat/change code review llm provider
    • Closes #11: Fixing looping in Kody response
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2122 ci(evals): report each review stage's eval to the quality panel (@malinosqui) ⏳ Not yet released
    Every review stage reaches quality.signals as evals.stage.<stage>, and the kodus-quality "Evals by stage" page (kodustech/kodus-quality#9) shows each one: quality measured, only checked that it ru...

  • #2121 test(evals): finder recall can search the PR's real repository (@malinosqui) ⏳ Not yet released
    The finder-recall eval answers the agent's grep, readFile and listDir from a recording, and a call outside it gets an empty answer the repository would not give (#2114). RECALL_REAL_REPO=1 checks ou...

  • #2116 chore(evals): tier-0 models are gpt-6-sol, Sonnet 5.5, Kimi, DeepSeek (@malinosqui) ⏳ Not yet released
    Tier-0 (tier0() in evals/shared/tier0-models.js) becomes gpt-6-sol, claude-sonnet-5-5, kimi-k2.7-code, deepseek-v4-flash@fireworks (DeepSeek v4.1 flash on the managed default's route). gpt-5.4...

  • #2117 test(evals): review-rounds reproduces production reposts (@malinosqui) ⏳ Not yet released
    Eval evidence - Not run in CI: no workflow runs review-rounds with a real model. Local runs, committed in [results/2026-10-13](https://github.com/kodustech/kodus-ai/blob/873448b1fc808bb806a04a...

    • Closes #2097: Review comments repeat within a round and across rounds, mostly from Kody Rules
    • Closes #2114: Eval status per review stage, and no score from runs that diverge from production
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2096 test(evals): add never-repost cases R12/R13/R14/K4 to review-rounds (@Wellington01) ⏳ Not yet released
    Eval evidence (main + these cases, deepseek-v4-flash, 3 reps, judge gpt-5.6-luna; local, no CI workflow runs review-rounds with a real model) | Case | No history (must ship) | With history (mu...

    • Closes #2094: fix(code-review): drop the "Revises an earlier Kody suggestion" link
    • Closes #2097: Review comments repeat within a round and across rounds, mostly from Kody Rules
    • πŸ‘€ Reviewed by: @kody-ai[bot], @malinosqui
  • #2055 fix(codereview): mark PR-level comments with kody-codereview (@andyst-dev) ⏳ Not yet released

    Summary Refs #2050 Kody's inline review comments and the "Code Review Completed" comment carry a <!-- kody-codereview --> marker that webhook consumers use to recognize them. PR-level comments (a...

  • #1898 fix(llm): classify 5xx phrasing as TRANSIENT for BYOK fallback (#1875) (@andyst-dev) ⏳ Not yet released
    Fixes #1875 ## Problem A transient upstream outage can fail an agent-based review instead of triggering the BYOK fallback. When the main provider returns a 5xx, the AI SDK wraps retry exhaustion in an...

    • Closes #1875: Agent-based review skips BYOK fallback: reconstructed agent error loses HTTP status and classifies as UNKNOWN (2.2.1)
    • Closes #1898: fix(llm): classify 5xx phrasing as TRANSIENT for BYOK fallback (#1875)
    • πŸ‘€ Reviewed by: @kody-ai[bot], @malinosqui, @sartorijr92
  • #2031 docs(evals): translate and correct the scorer submission guide (@PeterDaveHello) ⏳ Not yet released

    Summary

Translate the scorer guide linked from CodeReviewBench's leaderboard into English and correct its submission instructions. Clarify the 30-case light set, Kodus reference run, submission de...

  • πŸ‘€ Reviewed by: @copilot-pull-request-reviewer[bot], @kody-ai[bot], @Wellington01

  • #2033 fix(agents): report an unverified check when tsc cannot build the project (@andyst-dev) ⏳ Not yet released

    Summary checkTypes answered No diagnostics matched <file>; omitted unrelated diagnostics outside this local scope. for a file it never type-checked. In the sandbox the project cannot be loaded ...

    • Closes #1940: checkTypes reports "No diagnostics matched" when the compiler could not check the project
    • Closes #1939: Submodule directories are empty in the review sandbox and the tools report them as absent code
    • πŸ‘€ Reviewed by: @kody-ai[bot], @Wellington01
  • #2028 fix(code-review): anchor inline comments on the reviewed commit (#2012) (@andyst-dev) ⏳ Not yet released

    Eval evidence - Evals: wiring smoke (PR) (code-review-evals-pr.yml, the PR-tier eval that runs on libs/**): run 36826758813 o...

    • Closes #2012: Review comments are anchored on a commit pushed during the review, not on the commit the review read
    • πŸ‘€ Reviewed by: @kody-ai[bot], @Wellington01
  • #1928 fix(platformData): UUID suggestion IDs for ingest (#1846) (@andyst-dev) ⏳ Not yet released

    Summary Fixes #1846 Suggestion ids were generated as Mongo ObjectId hex strings, but both the Mongo read path (findByOrganizationAndRepositoryWithStatusAndSyncedFlag) and the embed ingest (`Sugge...

    • Closes #1846: Fine-tuning never indexes persisted suggestions: ingest requires UUID ids but persistence writes Mongo ObjectIds
    • πŸ‘€ Reviewed by: @kody-ai[bot], @Wellington01
  • #2065 fix(platform): accept the Azure abandoned PR status so it is saved (@andyst-dev) ⏳ Not yet released

    Summary Refs #2060 Azure Repos sends resource.status: 'abandoned' when a PR is abandoned, but isValidPullRequestAction in save.use-case.ts omitted that status from its accepted list, so the u...

  • #2054 fix(platform): store the Forgejo comment id, not the review id (@andyst-dev) ⏳ Not yet released

    Summary Refs #2051 createReviewComment on Forgejo came up with the id of the inline comment from review.comments[0], but Forgejo 16.x answers the create-review request with the review, `comment...

  • #2105 fix(scripts): run the env generator without a shell in env:check (@Mohil-Ahuja) ⏳ Not yet released

    Summary Fixes #2045. pnpm run env:check (and so the pre-push hook) failed for anyone whose checkout path contains a space. check-drift.ts ran ``execSync(`ts-node ${join(__dirname, 'generate.ts'...

    • Closes #2045: env:check fails on a checkout path that contains a space
  • #2078 feat(settings): global kody learning (@jairo-litman) ⏳ Not yet released
    Closes #1942. Kody Rules learning (past-review generation, IDE rule-file sync) is set once at global level and overridable per repository. Eval evidence - code-review-evals-pr.yml: https://github.com/...

  • #2058 feat(suggestions): concise suggestions (@jairo-litman) ⏳ Not yet released
    Closes #1822 Adds bold finding titles, two-sentence explanations and complete agent prompts; retains merged-location lists after formatting. Bitbucket posts prompts as replies. Preserves full explanat...

    • Closes #1822: Make review suggestions faster to understand and act on
    • Closes #2050: PR-level Kody comments on GitHub, GitLab and Azure Repos have no kody-codereview marker
    • Closes #2051: Forgejo inline review comments are stored with the review id instead of the comment id
    • Closes #2059: PR records combine when repositories share a name and PR number
    • Closes #2060: Abandoned Azure PRs remain open and their feedback is not collected
    • πŸ‘€ Reviewed by: @kody-ai[bot], @Wellington01
  • #2093 fix(web): stop the BYOK routing model picker from crashing on the first keystroke (@Wellington01) ⏳ Not yet released
    Typing one character in any model picker on /byok β†’ Routing crashed the page (TypeError: Failed to execute 'appendChild' on 'Node'), for any org with 2+ models. Reported by a customer; reproduced on...

  • #2026 fix(byok): quote the provider error when a BYOK model fails (@Wellington01) ⏳ Not yet released
    Refs #1871 β€” the dashboard half. #1872 covered the PR comment. What changed - The BYOK reporter sends the provider's own sentence (extractProviderMessage, redacted and capped) instead of `err.me...

    • Closes #1871: OpenRouter reviews fail after a successful connection test without actionable diagnostics
    • Closes #1872: fix(code-review): report what the provider actually said when a review fails
    • πŸ‘€ Reviewed by: @kody-ai[bot], @malinosqui
  • #2085 fix(worker): keep task protection; stop consuming on SIGTERM (@Wellington01) ⏳ Not yet released

    Summary Workers were killing code reviews mid-run on every deploy and scale-in. Two causes, both fixed here: 1. Task protection dropped while jobs were still running. handleWorkflowJob called...

    • Closes #2052: worker: main thread freezes for minutes (one core at 100%), gets killed by health check, orphans inbox jobs
    • Closes #1830: Workflow jobs stranded in PROCESSING when a worker dies mid-job β€” in-process timeout cannot recover them
    • Closes #1902: fix(workflow): reclaim stranded PROCESSING jobs via lease
    • πŸ‘€ Reviewed by: @kody-ai[bot], @malinosqui
    • πŸ‘₯ Co-authored by: [@claude Opus 5.5](https://github.com/Claude Opus 5.5)
  • #2092 perf(mongo): maxTimeMS, token-usage tier brackets, missing indexes (@Wellington01) ⏳ Not yet released

    Eval evidence - Eval run on this branch: code-review-evals-pr.yml wiring smoke at 67dc8f5 (passed earlier at eec8206: [run](h...

  • #2091 fix(web): stop /byok waiting forever on the cost summary (@malinosqui) πŸ“¦ Released in web-1.2.7
    Hotfix: /byok (AI providers) stays on its skeleton for high-volume orgs. Why. apps/web/src/features/ee/byok/page.tsx awaits GET /usage/tokens/summary with no timeout. That endpoint runs two ...

  • #2088 docs(changelog): add October 6, 2026 release notes (@edvaldofreitas) πŸ“¦ Released in web-1.2.7

    What changed - Adds the October 6, 2026 changelog entry: the platform redesign (settings pages, scope selector, Kody Rules table, sidebar navigation, ⌘K palette, locked pages, Reviews skipped/warni...

  • #2074 fix(code-review): never repost an earlier suggestion; link revisions to it (@Wellington01) πŸ“¦ Released in 2.2.6
    Refs #2039, #2020. Design comments on both issues are pending; overlaps the open product question in #1670 (this stays PR-scoped, no memory, no paraphrase). #2040 is out of scope. What changed - H...

    • Closes #2039: Kody posts a finding against the result of its own previous-round suggestion without referencing it
    • Closes #2020: Kody posts a finding that reverses its own previous-round suggestion on the same PR when that suggestion is not marked implemented
    • Closes #1670: @kody review --force has no memory
    • Closes #2040: Findings delivered as high severity while their own text says the code behind them was unreadable due to a sandbox failure
    • πŸ‘€ Reviewed by: @kody-ai[bot]
    • πŸ‘₯ Co-authored by: @malinosqui

πŸ‘₯ Contributors