Skip to main content
Glama

Assess Change Fit Tool

assess-change-fit-tool

Pre-flight fit check for a change you are about to open as a pull request. Pass the additions, deletions, and changed-file counts of your working diff 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

TableJSON Schema
NameRequiredDescriptionDefault
numstatNoStrongly 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.
additionsYesLines added in the proposed change (e.g. from `git diff --shortstat`).
deletionsYesLines deleted in the proposed change.
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

TableJSON 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. First observed

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so richly: it enumerates all four verdicts and their thresholds, discloses that an opinionated default-on standard overrides team norms (team_norms.target_total_changes), explains how test/docs/generated/binary content is discounted, and warns that reported values are recorded and visible to the team.

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

Conciseness3/5

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

It is well front-loaded, leading with the purpose, verdicts, and the numstat recommendation. However it runs six paragraphs and repeats the discounting rationale for numstat, test_lines, and moved_lines in several places, so not every sentence earns its place.

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?

An output schema exists so return values need not be explained, and the description still covers the verdict taxonomy, the scoping behavior of repository, the discounting model, and the recording workflow. An agent has everything needed to call this correctly and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it establishes the precedence rule that numstat supersedes test_lines/test_files, explains the review_goals semantics (outcomes not layers, 1/2/3+ thresholds) and the purpose of scope_rationale as preserving context without waiving the standard. This augments rather than repeats the schema.

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 opening sentence states a specific verb and resource: a 'pre-flight fit check' for a change about to be opened as a pull request, with the exact inputs (additions, deletions, changed-file counts). It clearly distinguishes itself from siblings by naming record-change-fit-decision-tool as the follow-up tool for recording the outcome.

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

Usage Guidelines5/5

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

Explicit when-to-use framing ('change you are about to open as a pull request'), a concrete recommended path (pass numstat and review_goals), and explicit routing to record-change-fit-decision-tool when the verdict is not 'fits'. It also states the alternative input modes (numstat vs manually declaring test_lines/moved_lines) and when each applies.

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