הפער
שתי פונקציות באותו שם, שממלאות את אותו מודל, מתנהגות אחרת לאותה קריאה:
| הפונקציה |
ברירת המחדל של 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 גם כן, כך ש"שכחתי להעביר תקרה" יתנהג אותו דבר בשני הפארסרים.
זה שינוי התנהגות על מסלול חי, ולכן הוא דורש:
- מדידה קודם. הקובץ העשיר ביותר ב-
docs/ נושא כמה עשרות כותרות, והתקרה היא 50,000 — כלומר פי כמה סדרי גודל. אבל את זה צריך למדוד על כל 208 קובצי ה-RST ולא להניח.
- אפס-דיף על
docs_get_section. הפלט של הכלי על כל קובץ .rst בריפו חייב להישאר זהה.
- בדיקה מה קורה לקורא השני.
mcp_server/outline_scanners/rst.py מעביר max_sections=_ceiling.MAX_SYMBOLS במפורש, ולכן הוא אינו מושפע — אבל זה צריך להיאמר בטסט ולא בהיגיון.
החלופה, אם היישור נדחה
להשאיר כמו שהוא ולתעד את זה כהחלטה סגורה במקום כהבדל פתוח. ההבדל כבר כתוב בשני ה-docstrings; מה שחסר הוא הכרעה שאומרת "וזה יישאר כך, ולמה".
🤖 Generated with Claude Code
https://claude.ai/code/session_01YSksrtTEth7eY52jwgYVbb
הפער
שתי פונקציות באותו שם, שממלאות את אותו מודל, מתנהגות אחרת לאותה קריאה:
max_sectionsservices.rst_parser.parse_documentNoneservices.md_parser.parse_documentMAX_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גם כן, כך ש"שכחתי להעביר תקרה" יתנהג אותו דבר בשני הפארסרים.זה שינוי התנהגות על מסלול חי, ולכן הוא דורש:
docs/נושא כמה עשרות כותרות, והתקרה היא 50,000 — כלומר פי כמה סדרי גודל. אבל את זה צריך למדוד על כל 208 קובצי ה-RST ולא להניח.docs_get_section. הפלט של הכלי על כל קובץ.rstבריפו חייב להישאר זהה.mcp_server/outline_scanners/rst.pyמעבירmax_sections=_ceiling.MAX_SYMBOLSבמפורש, ולכן הוא אינו מושפע — אבל זה צריך להיאמר בטסט ולא בהיגיון.החלופה, אם היישור נדחה
להשאיר כמו שהוא ולתעד את זה כהחלטה סגורה במקום כהבדל פתוח. ההבדל כבר כתוב בשני ה-docstrings; מה שחסר הוא הכרעה שאומרת "וזה יישאר כך, ולמה".
🤖 Generated with Claude Code
https://claude.ai/code/session_01YSksrtTEth7eY52jwgYVbb