Skip to content

refactor: לשקול יישור ברירת המחדל של max_sections ב-rst_parser.parse_document #3420

Description

@amirbiron

הפער

שתי פונקציות באותו שם, שממלאות את אותו מודל, מתנהגות אחרת לאותה קריאה:

הפונקציה ברירת המחדל של max_sections המשמעות
services.rst_parser.parse_document None בלי תקרה. קורא ששכח להעביר אותה מקבל פרסור בלתי מוגבל
services.md_parser.parse_document MAX_SECTIONS (50,000) עם תקרה

למה זה נוצר, ולמה זה לא תוקן ב-#3418

ב-rst_parser הפרמטר נוסף לפארסר שכבר רץ בייצור, וברירת מחדל שאינה None הייתה משנה את התנהגות codekeeper_docs_get_section באותו קומיט. None הוא מה ששמר על "זהה בית-בית", וזה היה הדבר הנכון שם.

ב-md_parser אין התנהגות קודמת לשמר, ולכן נבחרה ההנחה היקרה: קורא ששכח להעביר תקרה מקבל הגנה ולא את היעדרה — אותו כלל fail-closed שכבר מנומק ב-_declares_write וב-_ceiling.py.

ההבדל מוצהר בשני ה-docstrings מאז #3418, כדי שלא יישאר בין השורות. מה שהוא לא — מיושר.

מה לשקול

להפוך את ברירת המחדל ב-rst_parser ל-MAX_SECTIONS גם כן, כך ש"שכחתי להעביר תקרה" יתנהג אותו דבר בשני הפארסרים.

זה שינוי התנהגות על מסלול חי, ולכן הוא דורש:

  1. מדידה קודם. הקובץ העשיר ביותר ב-docs/ נושא כמה עשרות כותרות, והתקרה היא 50,000 — כלומר פי כמה סדרי גודל. אבל את זה צריך למדוד על כל 208 קובצי ה-RST ולא להניח.
  2. אפס-דיף על docs_get_section. הפלט של הכלי על כל קובץ .rst בריפו חייב להישאר זהה.
  3. בדיקה מה קורה לקורא השני. mcp_server/outline_scanners/rst.py מעביר max_sections=_ceiling.MAX_SYMBOLS במפורש, ולכן הוא אינו מושפע — אבל זה צריך להיאמר בטסט ולא בהיגיון.

החלופה, אם היישור נדחה

להשאיר כמו שהוא ולתעד את זה כהחלטה סגורה במקום כהבדל פתוח. ההבדל כבר כתוב בשני ה-docstrings; מה שחסר הוא הכרעה שאומרת "וזה יישאר כך, ולמה".

🤖 Generated with Claude Code

https://claude.ai/code/session_01YSksrtTEth7eY52jwgYVbb

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions