Ένα diff δείχνει τι ισχυρίζεται ότι κάνει ένα patch. Δεν δείχνει αν το σφάλμα έφυγε πραγματικά, αν ο νέος κλάδος ενός if εκτελείται ποτέ ή αν η αναβάθμιση μιας εξάρτησης σπάει το import σε καθαρή εγκατάσταση. Οι ελεγκτές το ξέρουν, γι' αυτό τόσοι έλεγχοι τελειώνουν με «LGTM, εφόσον περάσουν οι δοκιμές».
Με τα patches που γράφει η AI το κενό μεγαλώνει. Ένα μοντέλο παράγει γρήγορα κώδικα που φαίνεται αληθοφανής, και ο αληθοφανής είναι ακριβώς αυτός που ξεγλιστρά από έναν κουρασμένο ελεγκτή. Η φθηνή λύση είναι να τρέξει η αλλαγή πριν την εγκρίνει κανείς — κάπου όπου δεν μπορεί να βλάψει τίποτα.
Ο έλεγχος: base, head, δοκιμές
Η πιο πειστική απόδειξη που μπορεί να δώσει ένα patch είναι μια αναπαραγωγή που αποτυγχάνει στον παλιό κώδικα και περνά στον νέο. Ένα sandbox το κάνει script 20 γραμμών. Είναι ένα microVM Firecracker με Python 3.12, Node.js 22, git και curl, που ξεκινά σε περίπου ένα δευτερόλεπτο:
import os
from eqvps import Sandbox
REPO, BASE, HEAD = os.environ["REPO_URL"], os.environ["BASE_SHA"], os.environ["HEAD_SHA"]
def repro(sb, ref):
sb.exec(f"cd /root/app && git checkout -q {ref}", timeout=55)
return sb.exec("cd /root/app && python3 /root/repro.py", timeout=55).exit_code
with Sandbox.create(tariff="standard", ttl=1800) as sb:
sb.exec(f"git clone -q {REPO} /root/app", timeout=55)
sb.exec("cd /root/app && pip install -q -r requirements.txt", timeout=55)
sb.upload("/root/repro.py", open("repro.py").read())
before, after = repro(sb, BASE), repro(sb, HEAD)
tests = sb.exec("cd /root/app && python3 -m pytest -q", background=True).wait()
print(f"repro on base: {before}, on head: {after}; tests: {tests.state}, exit {tests.exit_code}")
Το repro.py είναι το απόσπασμα από την αναφορά σφάλματος. Αν τερματίζει με μη μηδενικό κωδικό στο base και με μηδέν στο head, το patch διορθώνει ό,τι λέει ότι διορθώνει. Δημοσιεύστε αυτή τη γραμμή μαζί με τη σύνοψη των δοκιμών ως σχόλιο στο pull request, και ο ελεγκτής ξεκινά από γεγονότα.
Η σουίτα δοκιμών τρέχει ως εργασία παρασκηνίου, επειδή μία σύγχρονη εντολή σταματά στα 55 δευτερόλεπτα. Το TTL των 30 λεπτών περιορίζει πόσο μπορεί να σας χρεώσει μια κολλημένη εκτέλεση.
Πράκτορες ελέγχου που τρέχουν κώδικα
Η ίδια ιδέα λειτουργεί για έναν ελεγκτή AI. Συνδεδεμένος μέσω του διακομιστή MCP, ένας πράκτορας έχει εργαλεία sandbox: δημιουργία sandbox, εκτέλεση εντολής, αποστολή και λήψη αρχείων. Αντί να γράψει «αυτό ίσως σπάσει τη συμβατότητα με Python 3.8», φέρνει το branch, τρέχει τον κώδικα και παραθέτει το traceback — ή αναφέρει ότι όλα είναι εντάξει.
Δώστε σε έναν τέτοιο πράκτορα ένα όριο δαπανών και ένα token μόνο ανάγνωσης, και αποφασίστε ποια εργαλεία μπορεί να καλεί χωρίς να ρωτά. Οι δικλείδες ασφαλείας MCP καταγράφουν κάθε εργαλείο ανά επίπεδο κινδύνου.
Ποιο τιμολόγιο
| Αποθετήριο | Τιμολόγιο | Τυπικό πέρασμα | Κατά προσέγγιση κόστος |
|---|---|---|---|
| Μικρή βιβλιοθήκη, καθαρή Python ή JS | small (0.5 vCPU, 1 GB) | 2 λεπτά | $0.0011 |
| Web εφαρμογή με σουίτα δοκιμών | standard (1 vCPU, 2 GB) | 5 λεπτά | $0.0055 |
| Native επεκτάσεις, μεταγλωττιζόμενες εξαρτήσεις | plus (2 vCPU, 4 GB) | 15 λεπτά | $0.033 |
Τα προσωρινά sandboxes χρεώνονται ανά δευτερόλεπτο με ελάχιστο 60 δευτερόλεπτα. Αν ένας ελεγκτής θέλει να επιστρέφει στο ίδιο περιβάλλον για μερικές μέρες, δημιουργήστε το ως persistent: κρατά τον δίσκο του έως 30 ημέρες και χρεώνεται ανά ώρα που ξεκινά, οπότε ένα sandbox standard για διήμερο έλεγχο κοστίζει περίπου $3.17. Διαγράψτε το όταν γίνει merge το pull request.
Όρια που αξίζει να γνωρίζετε
- Δύο εντολές τη φορά ανά λογαριασμό. Υπεραρκετές για ελέγχους, που γίνονται ο ένας μετά τον άλλον. Αν ελέγχετε δεκάδες pull requests ταυτόχρονα, μπαίνουν σε ουρά.
- Χωρίς εισερχόμενες θύρες. Δεν μπορείτε να ανοίξετε την εφαρμογή σε browser. Ξεκινήστε τη μέσα και δοκιμάστε τη με
curl localhostαπό δεύτερη εντολή. - Χωρίς Docker μέσα. Οι δοκιμές που σηκώνουν containers ανήκουν σε runner σε VPS.
- Η εξερχόμενη σύνδεση είναι ανοιχτή. Αυτό κάνει το
pip installνα δουλεύει. Μη βάζετε στο sandbox τίποτα που δεν θα δίνατε στον συντάκτη του patch.
Για να ξεκινήσετε
Οι νέοι λογαριασμοί παίρνουν $1 χρόνου sandbox, που καλύπτει πάνω από εκατό περάσματα ελέγχου στο τιμολόγιο standard. Η σελίδα των sandboxes έχει τα τιμολόγια, η τεκμηρίωση του SDK κάθε μέθοδο που χρησιμοποιείται παραπάνω, και το SDK της Python σε 5 λεπτά τη ρύθμιση.
Σχετικά: απομονωμένες δοκιμές CI για ολόκληρο το pipeline, και sandbox για πράκτορες AI για τους πράκτορες που γράφουν τον κώδικα εξαρχής.
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.