Skip to main content
Glama

Assess change fit

assess-change-fit-tool

Pre-flight fit check for a change you are about to open as a pull request. Pass the numstat of your working diff (or, failing that, its additions, deletions, and changed-file counts) and Coderbuds answers whether the change fits how this team ships: a verdict with reasons, the team's own merged-PR size norms (median/p75) and merge time by size category, and the current review-queue pressure. Pass repository and that queue is scoped to it — human-authored open pull requests on the repo you are working in, not every repo the team owns, because "review one of these first" is only actionable if you are near them.

Four verdicts, and only two of them ask anything of you. fits — go. fits_at_edge — over the standard but inside its tolerance, which is stated for the record and needs no action, because changes this close to the line merge like changes under it. caution — meaningfully over; weigh the guidance. split_required — effectively unreviewable; split it.

Coderbuds applies its own opinionated standard (on by default, teams can opt out): changes well above the standard size get at least a caution regardless of what the team's historical norms would allow — reported as team_norms.target_total_changes.

Also pass review_goals: the distinct outcomes a reviewer must approve in this change. Describe outcomes, not implementation layers — an API, UI, migration, tests, and docs that deliver one behavior are one review goal. One goal fits. Two prompt a caution to confirm they really must ship atomically. Three or more require a split. This is the scope-coherence standard: a small diff can still be hard to review when it bundles unrelated decisions. If multiple goals truly cannot ship separately, use scope_rationale to preserve that context and record the decision after the check.

Best results: pass numstat, the raw output of git diff --numstat <base>.... Coderbuds then works out the split from the file paths itself — tests, documentation, generated files (lockfiles, snapshots, minified bundles) and binary assets are identified and discounted, so the verdict judges the CODE a reviewer actually has to read. 400 lines of blog post and 400 lines of business logic are not the same review, and without the paths there is no way to tell them apart.

Failing that, declare the split yourself: test_lines (changed lines living in test files, e.g. from git diff --shortstat -- tests/) and moved_lines (code relocated without behavioral change, e.g. an extraction refactor) are subtracted from the verdict, because a raw count punishes test coverage and double-counts refactors. Report these honestly; they are recorded with the check and visible to the team.

Do the same for files with test_files and moved_files. A rename sweep, codemod, or file-move refactor touches a lot of files with almost nothing to read in each, and the file count is judged separately from the line count — so without these a mechanical change is called oversized on file count alone. git diff --shortstat -M and git diff --summary will tell you how many of the changed files were renames.

When the verdict is not "fits", say what you did about it with record-change-fit-decision — including when you proceed anyway. Overriding is allowed; overriding silently is what leaves the standard unable to learn it is in the wrong place.

Input Schema

NameRequiredDescriptionDefault
numstatNoStrongly recommended: raw `git diff --numstat <base>...` output (tab-separated "added deleted path" rows, `-` for binary). Coderbuds counts the lines and files from it and classifies the paths itself, discounting tests, docs, generated files and binary assets, so the verdict judges the code a reviewer must read. Supersedes test_lines/test_files when given.
additionsNoLines added in the proposed change (e.g. from `git diff --shortstat`). Required unless numstat is given; worked out from the numstat when omitted.
deletionsNoLines deleted in the proposed change. Required unless numstat is given; worked out from the numstat when omitted.
repositoryNoOptional "owner/name" repository slug the change targets (e.g. patchstack/hub).
test_filesNoOptional: how many of the changed files are test files. Discounted from the file count the same way test_lines is discounted from the line count.
test_linesNoOptional: changed lines that live in test files (e.g. from `git diff --shortstat -- tests/`). Discounted from the verdict — test coverage is not review burden. Ignored when numstat is given.
moved_filesNoOptional: how many of the changed files were renamed or moved rather than edited (see `git diff --summary`). Discounted from the file count — without this a rename sweep is judged oversized on file count alone.
moved_linesNoOptional: lines that are relocated code, not new logic (e.g. an extraction refactor). Discounted from the verdict — a raw diff double-counts moves. Estimate honestly; recorded with the check.
review_goalsNoStrongly recommended: the distinct outcomes a reviewer must approve. Describe user or system outcomes, not implementation layers; supporting code, tests, docs, and migrations for one behavior are one goal. One fits, two get a caution, and three or more require a split.
changed_filesNoNumber of files changed. Optional but improves the size categorization.
scope_rationaleNoOptional: why multiple review goals must ship atomically. This preserves the reasoning for the team but does not silently waive the scope standard.

Output Schema

NameRequiredDescriptionDefault
teamYesTeam name.
reasonsYesWhy the verdict is what it is, in plain language.
verdictYesThe strongest result across active standards: fits | fits_at_edge (over the size standard but inside tolerance — stated, no action expected) | caution | split_required.
check_idYesId of the recorded check — pass it to record-change-fit-decision to say what you did about this verdict.
guidanceYesConcrete next steps when the change does not cleanly fit.
proposedYesThe proposed change: additions, deletions, changed_files, total_changes, the discounted surfaces (test_lines, moved_lines, docs_lines, generated_lines, test_files, moved_files, docs_files, generated_files, binary_files), reviewable_changes and reviewable_files (what the verdict judges), size_category (tiny|small|medium|large|oversized, of the reviewable surface).
standardsYesPer-standard results. `size` reports its own verdict and threshold; `scope_coherence` reports assessed|not_assessed|disabled, the normalized review goals, rationale, reason, and guidance.
repositoryNoMatched team repository slug, or null if none given/matched.
team_normsYesThe box: merged PRs analyzed, median/p75 total changes, the Coderbuds standard size ceiling when active (target_total_changes), and average merge-time hours by size category.
review_queueYesCurrent open PR count, how many are awaiting a reviewer, and how many have waited past the Coderbuds review-turnaround standard. Scoped to the repository when one was given. PRs left unreviewed for over a month are reported separately as `abandoned` and excluded from the awaiting/stale pressure counts — they call for closing, not reviewing.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / additions / description
      Previous value: -"Lines added in the proposed change (e.g. from `git diff --shortstat`)."New value: +"Lines added in the proposed change (e.g. from `git diff --shortstat`). Required unless numstat is given; worked out from the numstat when omitted."
    • changedInput schema / properties / deletions / description
      Previous value: -"Lines deleted in the proposed change."New value: +"Lines deleted in the proposed change. Required unless numstat is given; worked out from the numstat when omitted."
    • changedInput schema / properties / numstat / description
      Previous value: -"Strongly recommended: raw `git diff --numstat <base>...` output (tab-separated \"added deleted path\" rows, `-` for binary). Coderbuds classifies the paths itself and discounts tests, docs, generated files and binary assets, so the verdict judges the code a reviewer must read. Supersedes test_lines/test_files when given."New value: +"Strongly recommended: raw `git diff --numstat <base>...` output (tab-separated \"added deleted path\" rows, `-` for binary). Coderbuds counts the lines and files from it and classifies the paths itself, discounting tests, docs, generated files and binary assets, so the verdict judges the code a reviewer must read. Supersedes test_lines/test_files when given."
    • removedInput schema / required
      Removed value: -[
      -  "additions",
      -  "deletions"
      -]
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only `destructiveHint: false` in annotations, the description carries the behavioral burden well: it explains the four verdict meanings, the default opinionated size standard, repository-scoped queue pressure, discounting of tests/docs/generated/moved content, and that overriding the verdict is allowed but should be recorded. This is rich disclosure beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and verdicts, then moves into parameter guidance and follow-up recording. It is long for a tool description, but the complexity of 11 parameters and four verdicts justifies most of the length; a few illustrative passages could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema, the description does not need to explain return values in detail, and it covers the important decision context: verdict categories, size norms, queue scope, discounting rules, and the required follow-up recording tool. An agent has enough information to invoke and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is already 100%, the description adds meaningful semantics: `numstat` supersedes `test_lines`/`test_files`, test and moved line/file counts are discounted, `review_goals` must describe outcomes rather than implementation layers, and `scope_rationale` preserves context without waiving the standard. These details help an agent choose and populate parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific pre-flight action (“fit check for a change you are about to open as a pull request”) and explains exactly what Coderbuds returns: a verdict with reasons, team size norms, merge times, and review-queue pressure. It is clearly distinct from the sibling recording tool, which is named later as the follow-up action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives strong usage context: run it before opening a PR, pass `numstat` when possible, fall back to manual counts, and use `record-change-fit-decision` afterward when the verdict is not `fits`. It does not explicitly compare against other assessment-adjacent siblings, but the core when-to-use guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources