Skip to content

list_tree: חיתוך בתוך עמוד + עימוד אריתמטי יכולים לאבד נתיבים (לא בר-הגעה היום) #3481

Description

@amirbiron

מה הבעיה

RepoBackend.list_tree ב-mcp_server/repo_backend.py חותך עמוד באמצע כשהוא עובר את byte_budget (used += cost ואז if used > byte_budget: truncated = True; break), אבל העמוד הבא מתחיל ב-start = (page_i - 1) * per_page_i — כלומר אחרי עמוד מלא. הנתיבים שבין נקודת החיתוך לסוף העמוד לא יוחזרו באף עמוד. truncated: true אומר שהעמוד חלקי, אבל לא אומר איך לקבל את מה שחסר, ואין דרך לקבל אותו.

למה זה לא דחוף

מסמך המסירה (Ck-MCP-Handoff.md, "המוקש הזהה ב-list_tree, שהושאר בכוונה") מתעד שזה נבדק ואינו בר-הגעה היום: 1000 נתיבים עם include_stats מחזירים truncated=False. TREE_PER_PAGE_MAX ו-OUTPUT_BYTE_BUDGET הם שמגבילים את זה, ושינוי של אחד מהם יכול להפוך את זה לבר-הגעה.

התיקון שכבר קיים בריפו לאותה בעיה בדיוק

_outline_response, באותו קובץ, פתר את אותו דבר באאוטליין: עמוד שלא נכנס בתקציב נדחה כולו כ-page_too_large, עם הגודל, התקרה וה-per_page שגרם לו. אין חיתוך, ולכן אין אובדן, והתשובה אומרת לקורא בדיוק מה לעשות. אותה צורה מתאימה כאן. צריך לשים לב ש-entries (עם include_stats) נגזר מאותה לולאה ומאותה נקודת חיתוך כמו paths, ושהטסטים אוכפים את היישור ביניהם.

הקשר

העבודה על ref_not_mirrored (ענף claude/focused-ritchie-ju95we) נגעה ב-list_tree — הענף נפתר עכשיו לפני ls-tree — אבל לא בעימוד. לפי ההחלטה בתוכנית, העימוד נשאר לאישו הזה ולא נכנס לאותו PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions