Εισιτήρια και ανάθεση
Ένα εισιτήριο είναι η μονάδα εργασίας που παρακολουθεί το Control Center. Είναι σκόπιμα ένα ανόητο τεχνούργημα: ένας τίτλος, ένα σώμα, μια κατάσταση, ένας κάτοχος και μια θέση σε ένα δέντρο. Δεν είναι το πράγμα πάνω στο οποίο εκτελούν οι πράκτορες — η εργασία των πρακτόρων ζει σε συνομιλίες και η δομημένη έξοδος μιας εκτέλεσης ζει στο ημερολόγιο εκτέλεσης.
Η εκχώρηση καταγράφει την κυριότητα· δεν αποστέλλει τίποτα
Ενότητα με τίτλο «Η εκχώρηση καταγράφει την κυριότητα· δεν αποστέλλει τίποτα»Αυτό είναι το πιο σημαντικό σημείο που πρέπει να έχετε σωστά όσον αφορά τα εισιτήρια.
Η ρύθμιση του assignedAgentId γράφει ένα πεδίο και δημοσιεύει ένα
TicketAssigned γεγονός τομέα. Αυτό
το γεγονός είναι σήμα ελέγχου και ειδοποίησης και ενεργοποιητής pipeline.
Η εκχώρηση σε έναν πράκτορα δεν ξεκινά καμία εκτέλεση. Δεν υπάρχει
αποστολέας εισιτηρίων που να παρακολουθεί το assignedAgentId και να ξυπνά
αυτόν τον πράκτορα.
Η εξαίρεση είναι μια ομάδα: όταν οριστεί το assignedTeamId, το
TeamRoutingService αποστέλλει τον αρχηγό της ομάδας με το πρωτόκολλο
λειτουργίας και τον κατάλογο μελών.
Αν θέλετε ένας συγκεκριμένος πράκτορας να εργαστεί σε ένα εισιτήριο, του το ζητάτε σε μια συνομιλία, ή ένα βήμα pipeline τον αποστέλλει, ή ένας άλλος πράκτορας του αναθέτει την εργασία. Το να εκχωρήσετε ένα εισιτήριο σε έναν πράκτορα και να περιμένετε είναι το μόνο πράγμα που δεν θα παραγάγει ποτέ εργασία.
Κατοπτρικό αντίγραφο και επικάλυψη
Ενότητα με τίτλο «Κατοπτρικό αντίγραφο και επικάλυψη»Ένα εισιτήριο μπορεί να είναι αμιγώς τοπικό ή να υποστηρίζεται από ένα εξωτερικό σύστημα παρακολούθησης και μεταφέρει και τα δύο σε μία γραμμή.
Το κατοπτρικό αντίγραφο — πάροχος, εξωτερικό κλειδί, URL, τίτλος, περιγραφή, προτεραιότητα, ετικέτες, ακατέργαστη και κανονικοποιημένη κατάσταση, χρονικές σημάνσεις — είναι μια προσωρινή μνήμη όταν το εισιτήριο είναι απομακρυσμένο. Εκεί η πηγή της αλήθειας είναι το απομακρυσμένο σύστημα και μια ανανέωση ξαναγράφει το κατοπτρικό αντίγραφο εξ ολοκλήρου.
Η επικάλυψη — εκχώρηση, ανάθεση, σύνδεσμος χώρου, γονέας, έργο, συνδεδεμένα PR — υπάρχει μόνο στο Control Center. Το σύστημα παρακολούθησης δεν γνωρίζει τίποτα γι’ αυτήν και μια ανανέωση δεν την αγγίζει ποτέ.
Αυτός ο διαχωρισμός είναι που κάνει ασφαλή τον συγχρονισμό: μια λήψη από τον προμηθευτή μπορεί να είναι καταστρεπτική για το κατοπτρικό αντίγραφο χωρίς να χάνονται ποτέ τα μεταδεδομένα ενορχήστρωσης που είναι στρωμένα από πάνω.
Ο γράφος κύκλου ζωής δεσμεύει τους πράκτορες, όχι εσάς
Ενότητα με τίτλο «Ο γράφος κύκλου ζωής δεσμεύει τους πράκτορες, όχι εσάς»Οι καταστάσεις ακολουθούν τη ροή backlog → open → inProgress → inReview → done,
με το blocked ως πλευρικό βρόχο και τα failed / cancelled ως τις άλλες
τελικές καταστάσεις.
Ο γράφος μεταβάσεων επιβάλλεται μόνο στη διαδρομή πράκτορα και αυτοματισμού — εργαλεία MCP και reconcilers. Μια μη έγκυρη μετάβαση εκεί καταγράφεται και αγνοείται, ώστε ένας μπερδεμένος πράκτορας να μην μπορεί να πάει ένα εισιτήριο προς τα πίσω, έξω από μια τελική κατάσταση.
Κάθε αλλαγή που προέρχεται από τον χρήστη στο UI περνά force: true και
παρακάμπτει τον γράφο εντελώς. Ένας άνθρωπος μπορεί να μετακινήσει ένα εισιτήριο
σε οποιαδήποτε κατάσταση εμφανίζει ο επιλογέας — ακόμη και να ανοίξει ξανά μια
τελική κατάσταση. Ο επιλογέας δεν προσφέρει το failed· οι πράκτορες το ορίζουν
μέσω του fail_ticket. Ο γράφος είναι δικλίδα ασφαλείας για τον αυτοματισμό, όχι
κανόνας για το πώς επιτρέπεται να εξελιχθεί η εργασία.
Το TicketWorkflowService κατέχει κάθε τροποποίηση μέσω ενός μοναδικού σημείου
συμφόρησης που φορτώνει τη γραμμή, επιβεβαιώνει ότι ανήκει στον χώρο εργασίας
του καλούντος και γράφει με αναμενόμενο version, ώστε δύο ταυτόχρονες
επεξεργασίες να μην μπορούν να αντικαταστήσουν σιωπηλά η μία την άλλη.
Για τον πλήρη πίνακα καταστάσεων, τις μεταβάσεις, τη λίστα πεδίων και τα είδη σχέσεων, δείτε Κύκλος ζωής εισιτηρίου.
Προέλευση: πώς δημιουργήθηκε ένα εισιτήριο
Ενότητα με τίτλο «Προέλευση: πώς δημιουργήθηκε ένα εισιτήριο»Κάθε εισιτήριο έχει ένα originKind. Η απαρίθμηση έχει πέντε τιμές — manual,
pipelineStep, agentDelegation, externalSync, recovery — αλλά σήμερα
καταγράφονται μόνο δύο: το manual (η προεπιλογή στο createTicket,
συμπεριλαμβανομένων των θυγατρικών που ανατίθενται) και το externalSync (η
μηχανή συγχρονισμού, σε μια λήψη από τον προμηθευτή). Το
TicketWorkflowService.createTicket δεν δέχεται όρισμα προέλευσης, οπότε τα
pipelineStep, agentDelegation και recovery δεν καταλήγουν ποτέ σε μια
γραμμή.
Προστατευμένη ανάθεση
Ενότητα με τίτλο «Προστατευμένη ανάθεση»Η ανάθεση είναι το σημείο όπου ένας πράκτορας δημιουργεί εργασία για έναν άλλον πράκτορα και το σημείο όπου θα μπορούσαν να διαρρεύσουν προνόμια, γι’ αυτό οι προστατευτικοί έλεγχοι βρίσκονται στην πλευρά του διακομιστή, σε ένα σημείο συμφόρησης, και όχι μέσα σε οδηγίες προτροπής.
Το delegate_task δρομολογείται μέσω του TicketWorkflowService.delegateGuarded,
το οποίο υπολογίζει το βάθος και τη ρίζα του παιδιού από την αλυσίδα γονέων και
στη συνέχεια εκτελεί και τους τέσσερις ελέγχους DelegationGuards: ένα άλμα που
θα υπερέβαινε το όριο βάθους 3, ένα άλμα πίσω σε έναν πράκτορα που βρίσκεται
ήδη στην αλυσίδα (ανίχνευση κύκλου), ένα ανώτατο όριο αυτονομίας (το
πραγματικό επίπεδο του αναλαμβάνοντος στον χώρο δεν πρέπει να υπερβαίνει εκείνο
αυτού που αναθέτει) και ένα πλαίσιο προϋπολογισμού (η ανάθεση χρεώνει τον
εναπομείναντα προϋπολογισμό hard-stop αυτού που αναθέτει και δεν μπορεί να
δημιουργήσει περισσότερο). Η καλωδίωση παραγωγής παρέχει και τις δύο θύρες
επίλυσης. Η αυτονομία και ο προϋπολογισμός παραλείπονται όταν το from_agent_id
λείπει (ο απεριόριστος προϋπολογισμός ή ο προϋπολογισμός χωρίς πολιτική επίσης
περνά). Μια άρνηση εκπέμπεται ως DelegationRefusedException, της οποίας το
μήνυμα φτάνει αυτολεξεί στον πράκτορα που αναθέτει — μια ηχηρή άρνηση, ποτέ μια
σιωπηλή αδράνεια.
Το delegate_ticket είναι το παλαιότερο, αφύλακτο αδελφό: καλεί το
createTicket απευθείας και παραλείπει κάθε έλεγχο. Προτιμήστε το
delegate_task.
Μην συγχέετε το όριο βάθους ανάθεσης (3, στις αλυσίδες delegate_task) με το
όριο ένθεσης υποπρακτόρων του ενσωματωμένου harness (2). Είναι διαφορετικά όρια
σε διαφορετικούς μηχανισμούς.
Ιεραρχία, σύνδεσμοι και έργα
Ενότητα με τίτλο «Ιεραρχία, σύνδεσμοι και έργα»Οι σχέσεις γονέα και υποζητήματος βρίσκονται στο tickets.parent_ticket_id και
ανήκουν στα setParent / clearParent. Δεν είναι γραμμές του ticket_links,
οπότε ό,τι διαβάζει τις σχέσεις ενός εισιτηρίου πρέπει να συγχωνεύει και τις δύο
πηγές.
Το ticket_links κρατά τις κατευθυντικές ακμές μεταξύ κατά τα άλλα άσχετων
εισιτηρίων:
| Τύπος συνδέσμου | Σημασία |
|---|---|
blocks |
Η πηγή μπλοκάρει τον στόχο |
relatesTo |
Τα δύο εισιτήρια σχετίζονται (συμμετρικά) |
duplicateOf |
Η πηγή είναι αντίγραφο του στόχου |
Ένα έργο είναι μια ομαδοποίηση εισιτηρίων με εμβέλεια χώρου εργασίας προς έναν κοινό στόχο. Τα έργα υπάρχουν μόνο στο Control Center και δεν συγχρονίζονται ποτέ με εξωτερικό πάροχο.
Συνεργάτες
Ενότητα με τίτλο «Συνεργάτες»Οι γραμμές TicketCollaborator είναι ο τρόπος με τον οποίο συνδέονται
περισσότερα από ένα υποκείμενα σε ένα εισιτήριο, με ρόλο assignee,
collaborator ή reviewer. Οι άνθρωποι και οι πράκτορες είναι ισότιμες γραμμές
— ένα principalId συν ένα collaboratorType — χωρίς τιμή-φρουρό για τον
«χρήστη» και χωρίς ξένο κλειδί προς κανέναν από τους δύο πίνακες.
Εξωτερικός συγχρονισμός
Ενότητα με τίτλο «Εξωτερικός συγχρονισμός»Το εισιτήριο του Control Center είναι το κύριο. Η διαγραφή ενός εισιτηρίου είναι μόνο τοπική, οπότε ένα εισιτήριο που υποστηρίζεται από προμηθευτή και το διαγράφετε δεν διαγράφεται στο σύστημα παρακολούθησης και μπορεί να επανεμφανιστεί στον επόμενο συγχρονισμό. Οι συνεργάτες και τα θυγατρικά εισιτήρια διαγράφονται αλυσιδωτά.
Τα διαπιστευτήρια του προσαρμογέα επιλύονται από τις αποθήκες διαπιστευτηρίων του διακομιστή (ένα κλειδί Linear ή ένα διακριτικό GitHub που έχει επικολληθεί στις Ρυθμίσεις λαμβάνεται στο επόμενο αίτημα· το περιβάλλον απλώς τροφοδοτεί αρχικά αυτές τις αποθήκες).
Εισιτήρια και pipeline
Ενότητα με τίτλο «Εισιτήρια και pipeline»Κανένας κόμβος pipeline δεν δημιουργεί, ολοκληρώνει ή ακυρώνει εισιτήρια — η
παλέτα δεν έχει τέτοιο βήμα και η μηχανή δεν καλεί το TicketWorkflowService.
Ωστόσο, ένας ενεργοποιητής pipeline μπορεί να ενεργοποιηθεί από τα
TicketAssigned, TicketCompleted, TicketFailed ή TicketCancelled (αυτά τα
τέσσερα είναι τα γεγονότα εισιτηρίου που αντιστοιχίζει πραγματικά το
EventPayloadMapper). Δεν υπάρχει στήλη pipelineRunId στο εισιτήριο· η σύζευξη
με pipeline βρίσκεται στο ημερολόγιο εκτέλεσης του πράκτορα.
Δείτε επίσης
Ενότητα με τίτλο «Δείτε επίσης»- Pipeline και αυτοματισμός: τα γεγονότα εισιτηρίου μπορούν να ενεργοποιήσουν ένα pipeline
- Ενορχήστρωση: από πού προέρχεται ένα DAG θυγατρικών εισιτηρίων
- Το μοντέλο πρακτόρων: σε ποιον έχει εκχωρηθεί ένα εισιτήριο
- Γεγονότα τομέα: τα γεγονότα κύκλου ζωής του εισιτηρίου
- Κύκλος ζωής εισιτηρίου: καταστάσεις, πεδία, μεταβάσεις, σχέσεις
- Δημιουργία και διαχείριση εισιτηρίων
- Ανάθεση εργασίας σε πράκτορες
- Οργάνωση εργασίας με έργα