דלגו לתוכן

חישוב סקירה (קבוצות, צירים ו-diffs דטרמיניסטיים)

לשונית סקירה של ה-PR מציגה את ההתקדמות החיה של פייפליין הסקירה בזמן שהוא עובד, ובהמשך את הארטיפקט שהוא פרסם, עם הפעולות שעליו. לשונית אחת עם שני מצבים, כי מדובר באותו דבר בשני רגעים. זו אינה לשונית ברירת מחדל: ל-PR אין סקירה עד שמישהו מבקש אחת, ולכן שאל את ה־AI הוא מה שפותח אותה.

מאחורי הלשונית הזו, cc_server בונה קבוצות קבצים, מריץ את הצירים הדטרמיניסטיים ומגיש אותם דרך פעולות ה-RPC של review_studio.* (cohorts, blastRadius, cohortImpact, ciSignals, dependencyDiffs, setContractDecision, approveVisual, compute ותאומי ה-watch* שלהם). פריסה שמורה שעדיין מציינת את pr.reviewStudio פותחת את אותה לשונית סקירה.

בלשונית סקירה:

  • הסוכן המאחד מפרסם ארטיפקט שיחה רגיל עם publish_artifact, כך שהלשונית מציגה אותו דרך אותו מציג ארטיפקטים שנפתח מבועת צ׳אט — אין העתק בתצורת סקירה של מערכת הארטיפקטים.
  • הממצאים יושבים במסילה לצידו, וההכרעה נסמכת על פס דק מעל הארטיפקט ולא על כותרת של לוח מחוונים.
  • באנר מיושן מופיע כשהראש של ה-PR התקדם מעבר לסקירה.

ראו שימוש בסקירה מבוססת AI למהלך העבודה וסקירה ומיזוג של בקשת משיכה כדי לפעול על הסקירה.

הקבוצות מקבצות את הקבצים שהשתנו ב-PR לדליים של קבצים הנגזרים מהתוכן, כאלה ששייכים יחד לפי המשמעות, מדורגות לפי מידת ההשפעה כך שהקבוצה המסוכנת ביותר נקראת ראשונה. הן מחושבות מחדש בכל שינוי של head-SHA ומוחלפות במלואן; לכל קבוצה יש מפתח יציב לאורך דחיפות, כך שסיכום והתקדמות הסקירה שורדים ריבייס.

אם למאגר אין אינדקס קוד, הקבוצות נופלות חזרה לקיבוץ לפי נתיבים. כדי להכניס מאגר לאינדקס, השתמשו בהגדרות ← סביבת עבודה ← מאגרים — כל שורה של מאגר נושאת פעולה אינדוקס קוד שמריצה את הפייפליין index_code ומדווחת על ההתקדמות במקום.

גרף הקוד מנתח רק שפות שיש להן דקדוק שמצורף מראש (Dart, JS/TS, PHP, Python, Rust, Zig, C/C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB, Ada). מאגר בכל שפה אחרת לעולם לא יפיק קבוצות סמנטיות, ולא משנה כמה פעמים תיינדקסו אותו.

סוכן יכול לרשום סיכום markdown לקבוצה עם set_cohort_summary ולצרף תרשים סיור מודרך מובנה עם add_review_diagram — אובייקט מוקלד של רצף, של יחסי ישויות או של מכונת מצבים, ולעולם לא טקסט mermaid. כל קצה נבדק בהצלבה מול גרף הקוד האמיתי, וקצה שהגרף אינו יכול לאשש מסומן כלא־מאומת במקום להיות מצויר כעובדה.

ציר החוזה מבצע diff רק על קובצי מפרט מפורשים. הוא מזהה את ששת השמות שמוגדרים כברירת מחדל — openapi.yaml, openapi.yml, openapi.json, swagger.yaml, swagger.yml, swagger.json — ובנוסף כל קובץ שהשתנה ושמו מכיל openapi או swagger ומסתיים ב-.yaml, .yml או .json. חוזה שהוסק מקוד של handler נמצא מחוץ לתחום, וסכמות GraphQL אינן נכללות ב-diff.

כל שינוי מסווג — הוספות, הסרות ושינויים של endpoint, פרמטר, סכמה ותגובה — ונושא חומרה: breaking (endpoint או פרמטר שהוסרו, טיפוס מצומצם יותר, פרמטר חובה חדש), non-breaking (תוספתי), או אינפורמטיבי. שינוי שנדחה מכשיל את שער החוזה, וכך גם שינוי breaking שנותר ללא החלטה; שינוי breaking שאושר מפיק אזהרה; כשאין שינויי breaking, השער עובר. diff שמסומן derived (advisory) לעולם אינו משער.

אישור או דחייה של שינוי נעשים עם review_studio.setContractDecision.

אם ה-PR משנה רכיבי UI במאגר Flutter שיש בו אפליקציית Widgetbook, מעבר החישוב מרנדר את הרכיבים שהשתנו לפני ואחרי באמצעות מעבר גולדן של flutter test ללא ממשק גרפי, בעצי העבודה של הבסיס והראש של ה-PR, ואז מבצע diff על הפיקסלים.

תמונות מצב המסומנות changed או removed מחזיקות את השער החזותי עד אישורן; תמונות מצב unchanged, added ו-approved מסירות אותו. לאי־זמינות אחת מארבע סיבות: אין Flutter SDK במארח, אין אפליקציית Widgetbook במאגר, אין מקרי שימוש הניתנים לבדיקת גולדן, או שגיאה ברתמת הגולדן.

אישור של שינוי מכוון נעשה עם review_studio.approveVisual.

ציר מונע על ידי
נכונות סוכני סקירה (טוקנים)
אבטחה סוכני סקירה (טוקנים)
פער בדיקות סוכני סקירה (טוקנים)
חזותי דטרמיניסטי (רתמת גולדן)
חוזה API דטרמיניסטי (diff של מפרט)

שלושת צירי הטוקנים נרשמים כשסוכן מוביל קורא ל-finalize_review; שני הצירים הדטרמיניסטיים נרשמים על ידי מעבר החישוב.

כל ציר מדווח על אחד מאלה:

מצב משמעות
Pass רץ, ולא נמצא דבר חוסם
Warn רץ, יש חששות שאינם חוסמים
Fail רץ, ונמצאה בעיה חוסמת
Partial רץ אך לא הצליח להשלים; התוצאות חלקיות
Unavailable לא הצליח לרוץ כלל

רק pass ו-warn מסירים את השער מציר משעור. Partial ו-unavailable נבדלים במכוון מ-fail, ואף אחד מהם אינו מסיר שער.

הצירים מתמזגים ל-Ship, Hold או Block, והם יכולים רק להפוך את ההכרעה ל_חמורה יותר_ — היא לעולם לא מדורגת מטה. ציר משעור שנכשל כופה Block; ציר שהוא partial או unavailable כופה לפחות Hold. כך ציר חוסם שלא הצליח לרוץ מחזיק את ההכרעה: היעדר ראיה לעולם לא הופך שער לירוק.

ההכרעה בלשונית סקירה היא זו ש-finalize_review פרסם.