Έλεγχος με AI
Η μορφή ενός ελέγχου
Ενότητα με τίτλο «Η μορφή ενός ελέγχου»Ένας έλεγχος με AI είναι μία εκτέλεση του ενσωματωμένου pipeline pr_review πάνω
σε ένα ανοιχτό pull request. Το pipeline ανοίγει τον χώρο ελέγχου του PR,
εξαποστέλλει παράλληλα πράκτορες ελέγχου για να διαβάσουν το diff στο
απομονωμένο checkout αυτού του χώρου, ο καθένας καταχωρίζει τα ευρήματά του ως
δομημένους κόμβους ελέγχου, ένας επικεφαλής πράκτορας τα ενοποιεί σε μια
καθοδηγούμενη περιήγηση και ένας οριστικοποιητής υπολογίζει μία ετυμηγορία:
Ship, Hold ή Block. Αυτό που δεν κάνει ποτέ το pipeline είναι να
δημοσιεύσει — η ανάρτηση στο GitHub είναι ένα ξεχωριστό, σκόπιμο βήμα που κάνει
ένας άνθρωπος.
Η υπόλοιπη σελίδα εξηγεί τα κομμάτια και γιατί έχουν αυτή τη μορφή.
Ένας χώρος ελέγχου ανά PR
Ενότητα με τίτλο «Ένας χώρος ελέγχου ανά PR»Το πλαίσιο ελέγχου ενός PR είναι ένας χώρος μηνυμάτων — λειτουργία review,
είδος pr — συνδεδεμένος με το pull request μέσω μιας συσχέτισης χώρου
ελέγχου. Δημιουργείται με εγγύηση ιδιοδυναμίας: η σελίδα του PR, το pipeline
ελέγχου και οι επιφάνειες συνομιλίας εντοπίζουν όλα τον έναν χώρο που στηρίζει
το PR μέσα από την ίδια διαδρομή κώδικα, οπότε ένα πρότυπο που ελέγχει ένα PR και
ένας άνθρωπος που το ανοίγει δεν μπορούν ποτέ να καταλήξουν σε δύο διαφορετικά
δωμάτια που κοιτούν δύο διαφορετικά checkouts.
Το απομονωμένο worktree του χώρου έχει το PR σε checkout στο head ref του. Ένα δωμάτιο σημαίνει επίσης ένα checkout: κάθε ελεγκτής εργάζεται στον ίδιο χώρο, αντί να παίρνει ο καθένας τον δικό του κλώνο του χώρου εργασίας.
Κάθε ελεγκτής αναρτά στη δική του ονομασμένη ροή μέσα σε αυτόν τον έναν χώρο, και
τα ευρήματα είναι μηνύματα review_node αντί για απλό κείμενο. Η συγκέντρωση σε
επίπεδο χώρου στο τέλος είναι σκόπιμη — μια ετυμηγορία που θα υπολογιζόταν από τα
ευρήματα ενός μόνο νήματος θα ήταν σιωπηρά μια ετυμηγορία για έναν μόνο ελεγκτή.
Η συσχέτιση φέρει μια κλίμακα καταστάσεων — requested → in progress →
awaiting approval → completed — και αυτή είναι που ελέγχει πότε ενεργοποιείται
η Δημοσίευση στο GitHub στην καρτέλα Ανασκόπηση του PR.
Επίπεδα ελέγχου
Ενότητα με τίτλο «Επίπεδα ελέγχου»Το πόσο βαθύς είναι ένας έλεγχος είναι πολιτική χώρου εργασίας με τρία επίπεδα, που ορίζεται στις Ρυθμίσεις → Χώρος εργασίας → Γενικά, στην κάρτα Πολιτική χώρου εργασίας:
| Επίπεδο | Ελεγκτές που αποστέλλονται παράλληλα | Αναφορά |
|---|---|---|
light |
Μόνο μηχανικός | Μόνο ό,τι έχει ουσιαστική σημασία |
balanced |
Μηχανικός, QA, αρχιτέκτονας (η προεπιλογή) | Ο καθιερωμένος έλεγχος |
thorough |
Και οι πέντε, μαζί με ασφάλεια και απόδοση | Τίποτα δεν υποβαθμίζεται |
Το επίπεδο γυρίζει δύο διακόπτες ταυτόχρονα: ποιοι ελεγκτές αποστέλλονται
παράλληλα, κάτι που το επιβάλλουν οι πύλες κατάστασης runWhen του προτύπου
pipeline και όχι η διατύπωση της προτροπής — η διατύπωση της προτροπής μπορεί να
αγνοηθεί, μια πύλη όχι — και πού εμφανίζονται τα ευρήματα κάτω από το κατώφλι.
Κανένας από τους δύο διακόπτες δεν διαγράφει ποτέ ένα εύρημα: ένα επίπεδο που
αναφέρει λιγότερα καταχωρίζει ακριβώς τα ίδια και ομαδοποιεί τα υπόλοιπα.
Τα περάσματα ασφάλειας και απόδοσης επαναχρησιμοποιούν τους ενσωματωμένους πράκτορες αρχιτέκτονα και μηχανικού αντί να εισάγουν νέους. Η ειδίκευση είναι η ανάθεση με την οποία αποστέλλεται ο ελεγκτής, όχι ξεχωριστός πράκτορας ανά άξονα — ένας πράκτορας ανά άξονα θα ήταν πέντε επιπλέον γραμμές σε κάθε χώρο εργασίας χωρίς καμία επιπλέον δυνατότητα. Η επιλογή ελεγκτών δεν εξετάζει ποτέ το diff για γλώσσα ή τομέα.
Κόμβοι ελέγχου: τα ευρήματα ως δεδομένα, όχι ως κείμενο
Ενότητα με τίτλο «Κόμβοι ελέγχου: τα ευρήματα ως δεδομένα, όχι ως κείμενο»Ένα εύρημα που καταχωρίζεται με το add_review_node γίνεται ένας κόμβος
ελέγχου στο PR — αυτός είναι που αποδίδει η καρτέλα Ανασκόπηση, από αυτόν
υπολογίζεται η ετυμηγορία και αυτό μετατρέπεται σε ενσωματωμένο σχόλιο με τη
«Δημοσίευση στο GitHub». Ένας ελεγκτής που επιστρέφει μόνο κείμενο παράγει μια
εκτέλεση pipeline που φαίνεται επιτυχημένη και μια επιφάνεια ελέγχου που είναι
κενή· η καταχώριση είναι το κομμάτι που σηκώνει το βάρος.
Κάθε κόμβος φέρει:
| Πεδίο | Τιμές |
|---|---|
| Είδος | bug, suggestion, recommendation, question, ticket |
| Προτεραιότητα | P0 (κρίσιμο) → P3 (μικροπαρατήρηση) |
| Τριάδα ταξινόμησης | κατηγορία (security, stability, …), σοβαρότητα, προσπάθεια |
| Άγκυρα | Διαδρομή αρχείου, αρχή και τέλος γραμμής |
| Μεταφορά διόρθωσης | Προτεινόμενες γραμμές αντικατάστασης, προαιρετικό diff, προαιρετική προτροπή διόρθωσης |
| Βεβαιότητα | Βαθμολογία [0, 1] |
| Συλλογισμός | Η ανάλυση, γραμμένη πριν από το εύρημα |
Δύο λεπτομέρειες είναι σκόπιμες. Μια πρόταση GitHub με ένα κλικ προσφέρεται μόνο
όταν ο ελεγκτής έχει δώσει ακριβείς γραμμές αντικατάστασης — η εξαγωγή τους από
ένα unified diff κάνει λάθη σιωπηλά, και ένα commit με ένα κλικ μιας λανθασμένης
εξαγωγής είναι χειρότερο από την απουσία κουμπιού. Και το σχήμα του
add_review_node παρουσιάζει το reasoning πριν από το εύρημα, ώστε ένα μοντέλο
που συμπληρώνει το αντικείμενο με τη σειρά του σχήματος να γράφει πρώτα την
ανάλυση. Το πεδίο είναι προαιρετικό: η παράλειψή του δεν απορρίπτει τον κόμβο.
Ένας κόμβος με κακοσχηματισμένο ωφέλιμο φορτίο εξαφανίζεται αντί να μολύνει τον
έλεγχο.
Συναίνεση ομοτίμων
Ενότητα με τίτλο «Συναίνεση ομοτίμων»Ένας κόμβος περνά από open → consensus-ready → resolved ή dismissed. Το
μεσαίο βήμα είναι η καρδιά του μοντέλου: ένα εύρημα προάγεται μόνο όταν το
επιβεβαιώσει ένας ομότιμος ελεγκτής, και ένας πράκτορας δεν μπορεί ποτέ να
επιβεβαιώσει το δικό του εύρημα. Το εργαλείο MCP publish_review_to_github και
η προεπιλογή του RPC δημοσιεύουν ακόμη μόνο ευρήματα που έχουν επιβεβαιωθεί από
ομότιμους. Το κουμπί Δημοσίευση στο GitHub στην καρτέλα Ανασκόπηση στέλνει
αντίθετα κάθε εναπομείναν ανοιχτό εύρημα.
Ο κανόνας επιβάλλεται σε τρία ανεξάρτητα σημεία — το εργαλείο επιβεβαίωσης, τον οριστικοποιητή και τον δημοσιευτή — ώστε να αντέχει έναν ελαττωματικό καλούντα σε οποιοδήποτε από αυτά. Όλες οι αλλαγές κατάστασης περνούν από μία υπηρεσία, και αυτό είναι που κάνει μια κατάσταση να σημαίνει κάτι: πριν από αυτό, δύο μισές διαδρομές μπορούσαν να διαφωνήσουν για το αν το ίδιο εύρημα είχε επιλυθεί.
Όταν οι ελεγκτές διαφωνούν — ίδιο αρχείο και γραμμή, προτεραιότητες που απέχουν
δύο ή περισσότερα επίπεδα, ή ο ένας να το χαρακτηρίζει bug ενώ ο άλλος
suggestion — η διαφωνία εμφανίζεται πάνω από τη λίστα ευρημάτων. Εκεί είναι που
οι γνώμες των ελεγκτών αποκλίνουν και η κρίση του ανθρώπου αξίζει περισσότερο από
οπουδήποτε αλλού.
Η απόρριψη ενός ευρήματος γράφει επίσης ένα χαλαρό γεγονός καταστολής στον τομέα μνήμης, με χαμηλή βεβαιότητα — μία απόρριψη είναι προτίμηση, όχι κανόνας.
Κοόρτες: γύρω από τι ομαδοποιείται ο έλεγχος
Ενότητα με τίτλο «Κοόρτες: γύρω από τι ομαδοποιείται ο έλεγχος»Το πέρασμα υπολογισμού ελέγχου ομαδοποιεί τα αλλαγμένα αρχεία ενός PR σε κοόρτες που προκύπτουν από το γράφημα κώδικα: τα αλλαγμένα αρχεία αντιστοιχίζονται στα σύμβολα που αγγίζουν, τα σύμβολα σε συνδεδεμένα στοιχεία, και οι κοόρτες κατατάσσονται κατά εύρος επίπτωσης. Μια κοόρτα φέρνει μια καθοδηγούμενη σειρά ανάγνωσης, διαγράμματα και επισημάνσεις, αντί να είναι μια επίπεδη λίστα αρχείων.
Δύο κανόνες εντιμότητας τη διαμορφώνουν. Τα κλειδιά των κοορτών προκύπτουν από το περιεχόμενο και είναι σταθερά μεταξύ των push, ώστε τα ευρήματα και η πρόοδος του ελέγχου να επιβιώνουν από ένα rebase ή force-push αντί να ορφανοποιούνται. Και όταν το αποθετήριο δεν έχει ευρετήριο κώδικα, η ομαδοποίηση καταφεύγει σε απλές διαδρομές και το δηλώνει — η εφεδρική λύση δεν προσποιείται ποτέ σημασιολογική βεβαιότητα.
Άξονες και πύλες ελέγχου
Ενότητα με τίτλο «Άξονες και πύλες ελέγχου»Παράλληλα με τα ευρήματα των ελεγκτών, ένας έλεγχος συγκεντρώνει αποτελέσματα αξόνων: έξι άξονες, δύο ειδών.
| Άξονας | Είδος | Αντλείται από |
|---|---|---|
correctness, security |
Οδηγούμενος από token | Τα ίδια τα ευρήματα των ελεγκτών |
testGap |
Οδηγούμενος από token | Τα ευρήματα των ελεγκτών |
visual, apiContract |
Ντετερμινιστικός | Υπολογίζεται χωρίς κατανάλωση token |
performance |
Ντετερμινιστικός | Μόνο enum — τίποτα στο προϊόν δεν υπολογίζει αποτέλεσμα |
Η ετυμηγορία ενός άξονα είναι pass, warn, fail, partial ή unavailable —
και μόνο τα pass ή warn περνούν μια πύλη. Η διάκριση ανάμεσα σε fail,
partial και unavailable σηκώνει βάρος: ένας άξονας με πύλη που δεν μπόρεσε να
ολοκληρωθεί ή δεν μπόρεσε καθόλου να εκτελεστεί κρατά τη συνολική ετυμηγορία αντί
να την αφήνει να περάσει. Η απουσία τεκμηρίων δεν μετατρέπεται ποτέ σε πράσινη
πύλη.
Ορισμένοι άξονες είναι σκόπιμα συμβουλευτικοί. Ο άξονας του χάσματος δοκιμών που προκύπτει από τις κοόρτες δεν μπορεί να δει κάλυψη έγχυσης εξαρτήσεων ή εργοστασίων — ένα αποθετήριο χωρίς ευρετήριο με εξαντλητική σουίτα δοκιμών και ένα χωρίς καθόλου τεστ φαίνονται πανομοιότυπα από εκεί, οπότε το να ισχυριστούμε το ένα ή το άλλο θα ήταν ψέμα· εμφανίζεται στο ταμπλό χωρίς να λειτουργεί ως πύλη. Οι άξονες token είναι συμβουλευτικοί επειδή οι προτεραιότητες των ευρημάτων οδηγούν ήδη την ετυμηγορία, και το να τους βάλουμε ξανά ως πύλη θα οδηγούσε σε διπλή μέτρηση.
Η ετυμηγορία
Ενότητα με τίτλο «Η ετυμηγορία»Ο οριστικοποιητής υπολογίζει την ετυμηγορία πάνω στα ευρήματα με κατάσταση open
ή consensus-ready:
- οποιοδήποτε εύρημα P0 με βεβαιότητα ≥ 0.7 → Block
- διαφορετικά, οποιοδήποτε P0 (χαμηλής βεβαιότητας) ή οποιοδήποτε P1 → Hold
- διαφορετικά → Ship
Η ετυμηγορία φέρει μια συνολική βεβαιότητα που προκύπτει από τη διασπορά των επιμέρους βεβαιοτήτων — η συμφωνία την ανεβάζει, η απόκλιση τη ρίχνει.
Η ενοποίηση από τον επικεφαλής (CEO) πράκτορα είναι ένα συντακτικό πέρασμα, όχι επανάληψη της λίστας: ένα χειρόγραφο δεύτερο αντίγραφο των ευρημάτων είναι ακριβώς αυτό που ξεφεύγει από το πραγματικό. Τα διπλότυπα ευρήματα υποβαθμίζονται αντί να επαναλαμβάνονται — αρκετοί ελεγκτές στρέφονται στο ίδιο diff με σκόπιμα επικαλυπτόμενες αρμοδιότητες, οπότε το ίδιο ελάττωμα να φτάνει τρεις φορές στον οριστικοποιητή σημαίνει ότι το σύστημα δουλεύει· το να δημοσιευτεί τρεις φορές σημαίνει ότι το σύστημα διαρρέει τη δική του αρχιτεκτονική στα εισερχόμενα του αναγνώστη. Σε έναν νέο έλεγχο, στα ευρήματα υπολογίζεται δακτυλικό αποτύπωμα και συγκρίνονται με τον προηγούμενο γύρο, ώστε να αναδεικνύεται η διαφορά.
Τέλος, οι άξονες μπαίνουν στο παιχνίδι, και μπορούν μόνο να κάνουν την ετυμηγορία πιο αυστηρή: ένας άξονας με πύλη που αποτυγχάνει επιβάλλει Block — δεν μπορούν να τον υπερψηφίσουν τα ευρήματα — και ένας άξονας με πύλη που δεν μπόρεσε να ολοκληρωθεί επιβάλλει τουλάχιστον Hold.
Η δημοσίευση παραμένει σε εσάς
Ενότητα με τίτλο «Η δημοσίευση παραμένει σε εσάς»Το pipeline σκόπιμα δεν αναρτά στο GitHub· η δημοσίευση εξαρτάται από τον χρήστη, ώστε ένας έλεγχος να μην μπορεί ποτέ να δημοσιευτεί δύο φορές. Όταν πατάτε Δημοσίευση στο GitHub:
- Υποβάλλεται μία ανασκόπηση στο GitHub. Τα ευρήματα που έχουν ήδη επιλυθεί ή
απορριφθεί παραλείπονται. Το κουμπί δημοσιεύει κάθε εναπομείναν ανοιχτό εύρημα
(
selection: all_open). Το εργαλείο MCPpublish_review_to_githubεξακολουθεί να έχει ως προεπιλογή μόνο τα ευρήματα που έχουν επιβεβαιωθεί από ομότιμους (consensus). - Τα ευρήματα που είναι αγκυρωμένα σε αρχείο και γραμμή γίνονται ενσωματωμένα σχόλια· όλα τα υπόλοιπα διπλώνονται στο σώμα της σύνοψης, καθένα με υποσέλιδο «— Control Center AI review», ώστε η προέλευση να είναι σαφής.
- Οι άγκυρες επαληθεύονται ξανά με το τρέχον diff του PR τη στιγμή της δημοσίευσης. Ένα σχόλιο σε κώδικα που έχει ήδη ξαναγραφτεί είναι το πιο καταστροφικό για την εμπιστοσύνη πράγμα που μπορεί να αφήσει ένας ελεγκτής· αν το GitHub απορρίψει μια ενσωματωμένη άγκυρα, ολόκληρη η ανασκόπηση αποστέλλεται ξανά με κάθε εύρημα διπλωμένο στο σώμα, ώστε να μη χαθεί τίποτα σιωπηρά.
- Μια ετυμηγορία Block υποβάλλεται ως
REQUEST_CHANGES· Hold ωςCOMMENT· Ship ωςAPPROVEαπό το κουμπί (approve_on_ship: true). Το εργαλείο MCP αφήνει το Ship ωςCOMMENTεκτός αν περάσετεapprove_on_ship. - Η ανασκόπηση δημοσιεύεται με την ταυτότητα εφαρμογής του διακομιστή. Ποιος πάτησε τη Δημοσίευση καταγράφεται για την πύλη ρόλων και το ίχνος ελέγχου· δεν είναι ο συντάκτης στο GitHub.
Η δημοσίευση δηλώνει την κλάση ενέργειας prPublish, οπότε το σημείο ελέγχου των
περιορισμών τη φιλτράρει όπως κάθε ενέργεια που μεταβάλλει — ζητά έγκριση από
προεπιλογή και, όταν δεν είναι συνδεδεμένος κανένας εγκριτής, αποτυγχάνει με
απόρριψη. Δείτε Περιορισμοί.
Τι μπορεί να κάνει ένας ελεγκτής
Ενότητα με τίτλο «Τι μπορεί να κάνει ένας ελεγκτής»Οι πράκτορες ελέγχου εκτελούνται σε λειτουργία review: ένα sandbox μόνο για
ανάγνωση και μια επιμελημένη λίστα επιτρεπόμενων εργαλείων που καλύπτει ευρήματα,
σχολιασμό, εισιτήρια και έλεγχο από ομότιμους — αλλά καμία μετάλλαξη. Ένας
ελεγκτής δεν μπορεί να διορθώσει τον κώδικα που κρίνει· μπορεί να επισυνάψει μια
προτεινόμενη διόρθωση που την εφαρμόζει ένας άνθρωπος. Το μήνυμα άρνησης της
λειτουργίας λέει σε έναν πράκτορα που προσπαθεί να ενεργήσει παρ’ όλα αυτά να
ολοκληρώσει τον έλεγχο και να αφήσει τον χρήστη να ενεργήσει πάνω στη δημοσιευμένη
σύνοψη.
Σχετικές έννοιες
Ενότητα με τίτλο «Σχετικές έννοιες»- Περιορισμοί — η μηχανή πολιτικών που ελέγχει τη δημοσίευση
- Λειτουργίες — τι αλλάζει η λειτουργία
reviewγια έναν πράκτορα - Pipeline και αυτοματισμός — η μηχανή πάνω στην οποία εκτελείται ο έλεγχος
- Κύκλος ζωής αποστολής πράκτορα — από πού προέρχεται το απομονωμένο worktree
Σχετικοί οδηγοί πρακτικής
Ενότητα με τίτλο «Σχετικοί οδηγοί πρακτικής»- Χρήση ελέγχου με AI — εκτελέστε έναν έλεγχο και δημοσιεύστε τον
- Αποστολή πρακτόρων ελέγχου — επιλέξτε τους ελεγκτές μόνοι σας
- Υπολογισμός ελέγχου — κοόρτες, άξονες και diffs