0:00 — בנייה מסתיימת. הסוכן אומר שהיא מוכנה, וזו טענה על כתיבת קוד, לא על כך שהקוד עובד. כל משתמש בבונה מבוסס-AI חש את הפער בין שתי הטענות האלה לפחות פעם אחת: התצוגה המקדימה נפתחת, לוחצים על הכפתור השלישי, שום דבר לא קורה. ראיתי חדר הדגמות משתתק בדיוק באותו רגע. אז לפני שאדם כלשהו רואה בנייה, היא עוברת כשש דקות בערך של שרשרת שמתווכחת עם עצמה. כך זה נראה בפועל, מתועד דרך בנייה אחת שראינו שיוצאת לא טוב ואז מתוקנת.
0:02 — סקירת קוד מתחילה. לא הסוכן שכתב את הקוד קורא מחדש את שיעורי הבית שלו — סוכן נפרד, פרומפט שונה, בלי אינטרס שהבנייה תעבור. ההפרדה הזו חשובה יותר משנשמע. סוכן שהחליט בשעה 14:14 שקריאת fetch בלי טיפול בשגיאות זה בסדר, עדיין יחשוב כך בשעה 14:15 אם תבקשו ממנו לבדוק את העבודה שלו. סוקר טרי שנאמר לו "מצא מה שבור, ציין את הקובץ" מתנהג כמו המהנדס הבכיר הרטנן שאתם באמת רוצים בתפקיד הזה. בבנייה קודמת הוא תפס סה"כ עגלה שלא התעדכן בשקט — `updateTotal` הוגדרה ב-`Cart.jsx` אך מעולם לא חוברה למטפל שינוי הכמות, כך שהפונקציה קיימת ופשוט אף פעם לא רצה. זו הקטגוריה שלשמה קיימת סקירת קוד: דברים שקומפיילר פשוט מושך בכתפיו לגביהם.
0:04 — ביקורת אבטחה. צרה יותר משנשמע, בכוונה — זו לא בדיקת חדירות, זה ציד תבניות אחר קומץ הטעויות שבאמת מופיעות בקוד שנוצר על ידי AI. SQL המחובר כמחרוזות. אימות בצד לקוח בלבד שסומכים עליו כאילו זה כל הסיפור. והמומחיות של הבית: מפתח API מקודד קשיח, כי הסוכן שכתב את הפיצ'ר לא היה לו מוסכמת משתני סביבה מונחת לפניו והושיט יד לדבר שעבד. אנחנו רואים את זה מספיק פעמים שזה כמעט לא נחשב הפתעה יותר.
0:07 — קישורים ו-SEO. לא מרשים, ותופס את מה שאף אחד לא שם לב עד שלקוח כן: קישור ניווט שמפנה אל /pricing כאשר העמוד בפועל נוצר תחת /price, רשומת מפת אתר לעמוד שמחזיר 404, מטא-תיאור שעדיין מחזיק את טקסט התבנית הזמני. שום דבר מזה לא שובר את הבנייה. אבל כל זה בשקט הורס את מה שרוב המשתמשים שלנו בנו את האתר בשבילו מלכתחילה — להימצא, לקבל קליקים.
0:09 — נגישות. זה מעבר אוטומטי מבוסס axe-core, לא ביקורת ידנית מלאה, וכדאי להיות כנים לגבי מה שהעסקה הזו קונה. axe-core תופס יחסי ניגודיות, טקסט alt חסר, שדות טופס לא מתויגים, מלכודות סדר-טאב — השכבה המכנית, משהו כמו 30-40% ממה שביקורת WCAG מלאה הייתה מסמנת. הוא לא יתפוס חוויית קורא מסך שתקנית טכנית אך מבלבלת באמת לשימוש. בחרנו באוטומציה בלבד כי היא רצה תוך שניות ורוב מה שנשלח דרך כאן הם אתרי שיווק וכלים קטנים, לא סוג היישום שבו ביקורת חלקית מהווה סיכון אמיתי למישהו.
0:11 — התאמה. השכבה הזו לא שואלת "האם זה טוב", היא שואלת "האם זה תואם למה שהובטח". התוכנית קבעה ארבעה עמודים, הבנייה סיפקה שלושה — התאמה היא זו ששמה לב. התוכנית הבטיחה טופס יצירת קשר עובד, מה שסופק הוא טופס בלי פעולת שליחה — אותה שכבה, אותה תפיסה. זו הבדיקה שהכי ישירות אחראית כלפי המשתמש, כי היא מודדת מול הכוונה המוצהרת של המשתמש, לא מושג מופשט כלשהו של איכות.
0:13 — הבדיקה בתוך הדפדפן, וכאן הבנייה שלנו למעשה נשברה. השכבה הזו הכי קשה לזייף כי היא לא קוראת קוד, היא מפעילה דפדפן אמיתי — קליקים, הקלדה, המתנה, בדיקה שה-DOM השתנה כפי שהיה אמור. הבנייה המדוברת הייתה משחק אידל, ומשחקים מקבלים מעבר נוסף כאן כי משחק יכול להיראות מושלם פיקסל-פיקסל ועדיין להיות לא ניתן לשחק — תצוגת הניקוד יכולה להיראות ללא רבב תוך היותה מנותקת לחלוטין מלוגיקת הניקוד. המאמת שיחק בו. הניקוד התעדכן כשורה. השמע לא השמיע קול.
שלושה סבבים, ואז אסקלציה
הממצא לא הגיע אלינו כדוח באג — הוא נכנס ישירות למעבר תיקון, והשרשרת אימתה מחדש, עד שלושה סבבים בתוך הבנייה. סבב ראשון: התיקון נגע באתחול המיקסר, שכבר היה תקין, כך שהשמע נשאר שקט. סבב שני: תיקון אחר טיפל בקצה של מצב טעינה שנראה סמוך, ו — זה קורה יותר משהייתם מצפים — הכניס בעיה חדשה קטנה מבלי לפתור את המקורית. סבב שלישי: עדיין שקט, ובשלב הזה בדרך כלל אתם מסתכלים על משהו שהוא באמת קשה או אזעקת שווא, וזה היה מהסוג הקשה.
אז הפלטפורמה עשתה אסקלציה בעצמה. היא הכניסה לתור ריצת תיקון המשך שממוקדת לגמרי בממצא ששרד, פועלת על שיבוט של הבנייה ולא על הבנייה עצמה — כלומר ריצת האסקלציה יכלה להיכשל בלי לעלות לנו את הגרסה העובדת שכבר הייתה בידינו. הריצה הזו מצאה את הסיבה האמיתית: דגל השתקה שהוגדר במעבר דיבוג קודם ומעולם לא הוחזר, יושב בקובץ שונה לגמרי מזה שבו נגעו שני התיקונים הקודמים. ניקו את הדגל, אימתו מחדש, עבר. אף אחד לא הסתכל על הבנייה הזו עד שהיא כבר עבדה.
| הזמנה | שכבה | תפיסות |
|---|---|---|
| 1 | בדיקת קוד | לוגיקה שבורה, מטפלים מתים, באגי מצב |
| 2 | ביקורת אבטחה | משטחי הזרקה, סודות שדלפו, תבניות לא בטוחות |
| 3 | קישורים ו-SEO | קישורים שבורים, מטא-דאטה חסר, נכונות sitemap/robots.txt |
| 4 | נגישות | axe-core אוטומטי: ניגודיות, תוויות, ניווט מקלדת |
| 5 | התאמה לתוכנית | האם הבנייה מכילה את מה שהתוכנית הבטיחה |
| 6 | בדיקה בתוך הדפדפן | מפעיל את הבנייה בפועל — קליקים, הקלדה, צפייה בתגובה |
מה הייתי מדלג עליו בפעם הבאה
כמה חודשים לפני שמשחק האידל ההוא רץ, ניסינו גרסה רכה יותר של כל המערכת — מאמתים שהורשו להעלות כל חשש, בכל ניסוח שרצו. זה הפיק ממצאים כמו "כדאי לשקול לחלץ את זה לפונקציית עזר" ו-"שם המשתנה הזה יכול להיות ברור יותר", שנראו כמו חריצות ולא תיקנו כלום. מעברי תיקון בזבזו סבבים שלמים על ליטוש טקסט במקום תיקון מה שבאמת היה שבור. הידקנו את הכלל ל: ציינו קובץ, תארו כשל, או אל תגידו כלום. פלט המאמתים ירד בכמחצית וכמעט הכול שנשאר היה בר-פעולה. אם הייתי בונה את זה מחדש הייתי מדלג לגמרי על הגרסה הרכה והולך ישר לכלל הראיה — לא היינו צריכים ללמוד את הלקח הזה בדרך היקרה, פשוט עשינו זאת.
לכלל יש עלות אמיתית, ולא אעמיד פנים אחרת: חשש מעורפל-אך-נכון כמו "עיצוב ה-API הזה יבעית מישהו בעוד שישה חודשים" עכשיו נופל בין הכיסאות, כי מאמת לא יכול לקבע אותו לכשל קונקרטי. השלמנו עם העסקה הזו. שרשרת שגם עושה סקירת ארכיטקטורה לא מספיק מהירה כדי לרוץ על כל בנייה בודדת, והמהירות היא כל הפואנטה של להריץ את זה אוטומטית במקום לבקש מאדם לעשות זאת.
הייתי גם מדלג על הוספת סבב רביעי, אם מישהו שואל. כיוונו את מספר הסבבים כנגד בניות אמיתיות, והערך השולי מעבר לסבב השלישי צונח בחדות — הסבב הראשון פותר את רוב הממצאים הניתנים לתיקון, הסבב השני בעיקר מנקה בעיות שהסבב הראשון יצר, ועד הסבב השלישי מה שנשאר הוא או באמת קשה או שמעולם לא היה באמת שבור. סבב רביעי בעיקר קונה לכם זמני המתנה ארוכים יותר לאותה תוצאה.
שום דבר מזה לא בחינם, ושום דבר מזה לא חסין תקלות. שש שכבות בתוספת כמה שלוקח מעברי תיקון מוסיפות זמן אמיתי לכל בנייה — ההבדל בין סיום תוך פחות מדקה לבין סיום תוך כמה דקות. אנחנו חושבים שזו העסקה הנכונה עבור כל דבר שאתם עומדים להציג ללקוחות שלכם, אבל "מהיר" ו"מאומת" מושכים לכיוונים מנוגדים, ובחרנו במאומת. גם המאמתים הם מודלי שפה, אז מדי פעם הם מסמנים משהו שאינו באמת שבור, או מפספסים משהו שכן. כלל הראיה ולולאת רב-הסבבים הם גידור מפני זה, לא ערבות.
מה שמקבלים בסוף הוא רשומה: אילו שכבות רצו, מה הן מצאו, מה תוקן, ומה נשאר לשיקול דעתכם. הרשומה הזו קרובה יותר למוצר האמיתי מהקוד עצמו — זהו ההבדל בין לסמוך על בנייה כי היא נראית מוגמרת לבין לסמוך עליה כי משהו יריבותי ניסה לשבור אותה תחילה ונכשל.



