From 3e3596a28574d852e8b2915951b26c49dd2cc30f Mon Sep 17 00:00:00 2001 From: gustav-fff <286169375+gustav-fff@users.noreply.github.com> Date: Mon, 31 Aug 2026 08:27:16 -0700 Subject: [PATCH] fix(fff-mcp): omit git:clean from find_files output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit format_git_status_opt(None) returns Some("clean"), so file_suffix() materialized the default git state as a ' git:clean' tag on nearly every find_files result line. Clean is the default state; annotating it spends LLM context without adding signal, and pi-fff already suppresses it in fffFileAnnotation(). Filter it out in the MCP presentation layer only — core keeps full status so git:modified constraints still work. Closes #844 --- crates/fff-mcp/src/output.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/crates/fff-mcp/src/output.rs b/crates/fff-mcp/src/output.rs index 21ba7ecc6..e9265a585 100644 --- a/crates/fff-mcp/src/output.rs +++ b/crates/fff-mcp/src/output.rs @@ -21,9 +21,11 @@ fn frecency_word(score: i32) -> Option<&'static str> { } pub fn file_suffix(git_status: Option, frecency_score: i32) -> String { + // `clean` is the default state of nearly every file: annotating it burns + // context without adding signal. Only exceptional git state is surfaced. match ( frecency_word(frecency_score), - format_git_status_opt(git_status), + format_git_status_opt(git_status).filter(|status| *status != "clean"), ) { (Some(f), Some(g)) => format!(" - {f} git:{g}"), (Some(f), None) => format!(" - {f}"), @@ -545,6 +547,27 @@ fn collect_file_preview<'a>( mod tests { use super::*; + #[test] + fn suffix_omits_clean_git_status() { + assert_eq!(file_suffix(None, 0), ""); + assert_eq!(file_suffix(Some(git2::Status::CURRENT), 0), ""); + assert_eq!(file_suffix(Some(git2::Status::empty()), 0), ""); + assert_eq!(file_suffix(None, 120), " - hot"); + } + + #[test] + fn suffix_keeps_dirty_git_status() { + assert_eq!( + file_suffix(Some(git2::Status::WT_MODIFIED), 0), + " git:modified" + ); + assert_eq!(file_suffix(Some(git2::Status::WT_NEW), 0), " git:untracked"); + assert_eq!( + file_suffix(Some(git2::Status::INDEX_MODIFIED), 60), + " - warm git:staged_modified" + ); + } + #[test] fn trunc_strips_trailing_whitespace() { // Leading whitespace is now stripped by core's trim_whitespace option.