ביקשתי מ-Claude תיקון של שורת lint אחת. הוא חזר עם CI שגווע מזמן ו-CVE ש מתוקן בדרך — תופעות הלוואי גימדו את המשימה.
ב-repo של how2claude עמדתי לעשות מקבץ קטן של עריכות, וצעד הקדם היה להעביר את ה-rubocop lint. צילמתי מסך של GitHub Actions אדום ושלחתי ל-Claude.
המשפט הראשון שלו:
ה-CI נפל. אני הולך לבדוק למה.
הנחתי שהוא ירוץ עם rubocop, יסתכל על השגיאות ויתקן. לא.
כמה דקות אחר כך הוא חזר עם זה:
ה-CI נפל כבר זמן רב (גם ה-run הקודם מ-12 באפריל נפל). שתי קטגוריות של בעיות:
דברים שהכנסתי עכשיו: 2 הפרות RuboCop בקבצי migration
דברים שכבר היו שבורים:
- ה-CI לא מוגדר עם postgres service, אז test/system-test אפילו לא עולים (בעיית infra, ככה כבר שבועיים)
- 61 הפרות RuboCop קיימות מקודם (בקבצים שלא נגעתי בהם)
אני מתחיל מהשתיים שהכנסתי.
על הפסקה הזו שווה לעצור לשנייה.
מה שביקשתי ממנו זה "תקן rubocop." בזמן שהוא הלך לבדוק את היסטוריית ה-CI, הוא עשה דבר שלא ביקשתי — הוא מיין את "למה זה שבור" לשני סלים: מה שהבאתי הפעם אני, מול מה שה-repo כבר נשא איתו מזמן.
את הסיווג הזה לא ביקשתי. הוא עשה אותו בכל זאת.
מבין שני הסלים, השני הוא העיקר:
db:test:prepare נפל ב-connection refused בכל runבמילים שלו:
גם ה-run הקודם מ-12 באפריל נפל.
ה-CI היה אדום שלושה שבועות. דחפתי כל יום. כל push הראה CI אדום, אבל מאחר ובדרך כלל אני committing ישירות ל-master ומריץ specs לוקאלית, אילפתי את העין שלי לראות את האדום הזה כרעש רקע.
באותו רגע שאני מבקש מ-Claude לתקן lint אחד, הוא מושך את ההיסטוריה ודוחף לי לפנים: "זה לא התחיל מהשינוי שלך."
הוא דחף את הכול במעבר אחד:
✓ 63 הפרות RuboCop → 0 (autocorrect של whitespace ב-17 קבצים)
✓ MCP gem CVE-2026-33946 → bundle update mcp, 0.9.0 → 0.14.0
✓ test/system-test ללא postgres service → נוסף postgres:17 service container
✓ כל 241 הבדיקות עוברות עדיין לוקאלית
✓ bundler-audit: No vulnerabilities found
תסתכל על השורה השנייה. הוא bumpנה את גרסת ה-mcp gem מיוזמתו, כי ראה שהגרסה החדשה סוגרת CVE. לא ביקשתי. הוא פשוט ראה את האזהרה כשהריץ bundler-audit ולקח אותה איתו.
השורה השלישית היא מה שבאמת תיקן את ה-CI: postgres:17 כ-service container ב-workflow, עם health check ו-DATABASE_URL.
ואז הוא שאל על גרנולריות commits:
שני commits או אחד?
chore(lint): rubocop autocorrect (whitespace only)fix(ci): add postgres service + bump mcp gem for CVE-2026-33946או אחד:
fix(ci): make CI green again?
עניתי במילה אחת — commit — כלומר: לך עם השניים מופרדים. הוא pushed.
ה-CI רץ שוב. אמרתי לו לעקוב.
4 ירוקים, system-test עדיין אדום. בודק.
אחרי כמה תחקורים חזר עם:
תיקיית
test/system/בכלל לא קיימת — ה-job הזה מריץtest:systemבלי אף system test בכלל. בוא נמחק את ה-job.
נשארתי כמה שניות מסתכל על השורה הזו.
test/system/ היא תיקיית ברירת המחדל של Rails ל-system tests. אף פעם לא כתבתי system test בפרויקט הזה, אפילו לא פעם אחת, מהיום שעשיתי לו init. אבל ב-ci.yml ישב לו job של system-test שרץ בכל push, נפל בכל פעם, כי bundle exec rails test:system לא מצא את התיקייה.
ה-job הזה לא נשבר כש-Claude הוסיף postgres. הוא היה שבור מהיום הראשון של הפרויקט. הנחתי שעם postgres הוא יהפוך לירוק — לא, postgres לא היה הבעיה. הבעיה הייתה שה-job צריך להימחק.
ה-commit השלישי שלו:
e1d91d1 chore(ci): drop system-test job
CI ירוק.
אם מסתכלים אחורה על ההרצה:
אם הייתי עושה את זה לבד, הייתי עושה רק את ה-1 — כי ראיתי CI אדום שלושה שבועות, העין שלי הייתה קהה, והייתי אומר "תקן את ה-lint ונמשיך." אילפתי את המוח שלי לראות את האדום הזה כתפאורה.
ל-Claude אין את ההרגל הזה. אין לו זיכרון של "תמיד היה ככה" ל-repo. בכל פעם שהוא מסתכל על CI, הוא מסתכל בעין רעננה. וזה בדיוק היתרון — מה שאצלי הפך כבר ל"שבור-by-default מזמן," אצלו רואים.
כשמעבירים ל-Claude משימה קטנה, תופעת הלוואי הכי יקרה היא לרוב לא המשימה עצמה — אלא בדיקת בריאות אגב אורחא. אם הוא אומר לך "אגב X גם שמתי לב ש-Y ו-Z שבורים מזמן," אל תרשום את זה לרעש. זאת הדיאגנוזה.
כמה התאמות קטנות שאימצתי:
לפני המשימה הקטנה — תן לו לסרוק את הסביבה פעם אחת. שיסתכל על היסטוריית ה-CI לפני שהוא מריץ lint. שיראה מתי לאחרונה נגעו ב-schema לפני שהוא כותב migration. שיעשה grep על כיסוי הבדיקות של controller לפני שהוא עורך אותו. "הצצה לפני שמתחילים" עולה כמעט כלום, ולעיתים קרובות מוציאה "רגע, יש פה משהו."
כשהוא אומר "שתי קטגוריות של בעיות" או "שני סוגים של סיבות," זה ארגון שלא ביקשת. עצור והקרא את הפסקה עד הסוף. אל תדלג.
אל תעקוף את האדום ארוך הטווח. אמרתי לעצמי "זה known issue, אסתכל אחר כך" בכל push. "אחר כך" יכול להיות בעוד שלוש שנים. לתת ל-Claude לסדר את זה אגב שהוא ממילא בסביבה הוא הרבה יותר ריאלי מלהקדיש סלוט "ללכת לתקן את ה-CI."
שלושת ה-commits, עוד פעם:
74a3ebf chore(lint): rubocop autocorrect — Layout cops only
76264ee fix(ci): add postgres service + bump mcp gem for CVE-2026-33946
e1d91d1 chore(ci): drop system-test job
הראשון הוא מה שביקשתי. השני והשלישי הם מה שהוא הביא לבד. השניים האלה שווים הרבה יותר מהראשון.